标题: [其他] 【已解决】请教批处理for循环in内的命令长度是否有上限,如何解决? [打印本页]
作者: xiaolijian916 时间: 2021-8-6 17:20 标题: 【已解决】请教批处理for循环in内的命令长度是否有上限,如何解决?
本帖最后由 xiaolijian916 于 2021-8-10 21:29 编辑
执行代码是: mshta "about:<hta:application scroll=no border=thin maximizeButton=no minimizeButton=no showintaskbar=no />!html!
!html! 这段内容特别长,合并一行了之后html字符总数7千多...
伪代码:- set htatxt='mshta "about:<hta:application scroll=no border=thin maximizeButton=no minimizeButton=no showintaskbar=no />!html!"'
- for /f "tokens=1,2 delims=^=" %%a in (!htatxt!) do (
- REM 如果命令过长for循环不会执行吗?经过测试删减!Html!代码量会执行in内部的命令,有何办法解决代码量过长导致不能执行的问题?
- REM 尝试将!htatxt! 写入到文件中再读取出来(代码已压缩一行)还是不执行。。。。
- REM todo
- )
复制代码
作者: idwma 时间: 2021-8-6 20:52
放在里面有些符号是要转义的
试试单执行出结果后,只把结果放进去如果可以的话
作者: xiaolijian916 时间: 2021-8-6 22:01
放在里面有些符号是要转义的
试试单执行出结果后,只把结果放进去如果可以的话
idwma 发表于 2021-8-6 20:52
应该不是转义问题,html代码量不多的情况下能执行到内部,一旦html字符过多就不执行了。
作者: idwma 时间: 2021-8-6 22:16
本帖最后由 idwma 于 2021-8-6 22:25 编辑
像这样?- <!-- ::
- @echo off
- for /f "delims=" %%a in ('mshta.exe "%~f0"') do
- goto :eof
- -->
- <hta:application scroll=no border=thin maximizeButton=no minimizeButton=no showintaskbar=no />
复制代码
作者: xiaolijian916 时间: 2021-8-6 23:23
像这样?
idwma 发表于 2021-8-6 22:16
变个法执行原理没变,效果一样的。PS:怎么上传图片,图片看一下就明白怎么情况。
作者: xiaolijian916 时间: 2021-8-6 23:48
本帖最后由 xiaolijian916 于 2021-8-10 14:57 编辑
以下原示例代码,!tr!行记录不超于5行时,页面正常弹出,大于5行页面未弹出(怀疑是拼接过长导致无法执行)- REM ----------------------------------------------------------------------------------------->【清理过时的无线网络连接信息(采用hta构建方式实现)】
- :clear-wlan
- ECHO 清理完毕
- REM 【第二种】说明:hta=HTML Application简写,意为HTML页面应用程序,扩展性极强【弹窗未居中,需计算中心坐标】
-
- REM 自定义函数脚本封装
- set script="<script type='text/javascript'> window.resizeTo(800,500);window.moveTo((!xpixels!-800)/2,(!ypixels!-500)/2); "
- set script=!script!"function cls(){
- set script=!script!" var wifi = document.getElementsByName('wifi');"
- set script=!script!" var msg = "", array = [];"
- set script=!script!" for(var i = 0; i < wifi.length; i++){"
- set script=!script!" if(wifi[i].checked) {"
- set script=!script!" array.push(wifi[i].value);"
- set script=!script!" msg += ('【'+ wifi[i].sn + '】- ' + wifi[i].value + '\r');"
- set script=!script!" }"
- set script=!script!" }"
- set script=!script!" if(array.length == 0){"
- set script=!script!" alert('请至少选择一项');"
- set script=!script!" }else{"
- set script=!script!" var rs = confirm('您选中【'+ array.length +'】项分别是:\r-----------------------\r'+ msg +'-----------------------\r★ 此操作无法撤销,请您再次确认!');"
- set script=!script!" if(rs == true){"
- set script=!script!" new ActiveXObject('Scripting.FileSystemObject')).GetStandardStream(1).Write(array.join('&');close();"
- set script=!script!" }"
- set script=!script!" }"
- set script=!script!"}"
- set script=!script!"</script>"
-
- REM 页面样式封装
- set style="<style> body {font-family:微软雅黑} "
- set style=!style!"input[type=button] {background-color:#3399FF;border:0px;color:#FFFFFF;width:100px;height:35px;margin-left:30px;margin-right:30px;font-size:15px;font-weight:800;}; "
- set style=!style!"tr {height:30px;background-color:#CCFFFF}; tr.row {font-size:15px;font-weight:800;color:#FFFFFF;background-color: #3399FF}; td.sn {width:70px}; "
- set style=!style!"</style>"
-
- REM 表格内容封装
- set table="<table style='border:1px solid #3399FF;width:700px;' cellspacing='0'>"
- set table=!table!"<tr class=row>"
- set table=!table!" <td class='sn'> 序号</td>"
- set table=!table!" <td>名称</td>"
- set table=!table!" <td>口令</td>"
- set table=!table!" <td class='sn'> 序号</td>"
- set table=!table!" <td>名称</td>"
- set table=!table!" <td>口令</td>"
- set table=!table!"</tr>"
- REM 动态拼装行记录(数据量!tr!=50行左右)
- set table=!table!!tr!
- set table=!table!"<tr style='height:65px'>"
- set table=!table!" <td colspan=6 align='center' style='border:0px solid red'>"
- set table=!table!" <hr style='color:#3399FF;height:1px;'>"
- set table=!table!" <input type='button' value='清 理' onclick='cls()'>"
- set table=!table!" <input type='button' value='取 消' onclick='close()'>"
- set table=!table!" </td>"
- set table=!table!"</tr>"
- set table=!table!"</table>"
-
- REM 构建完整页面
- set htatxt="<title>清理无线网络连接历史记录</title> "
- set htatxt=!htatxt!!script!!style!!table!
- set htatxt=!htatxt:"=!
- REM set table=!table:"=!
- ECHO !htatxt!
- REM 封装将多行文本拼接为一行,增强可读性及易维护
- set htatxt='mshta "about:<hta:application scroll=no border=thin maximizeButton=no minimizeButton=no showintaskbar=no />!htatxt!"'
- REM echo !htatxt! >htatxt.txt
- set pname=
- set pvalue=
- for /f "tokens=1,2 delims=^=" %%a in (!htatxt!) do (
- REM 根据页面操作返回数据执行后续业务逻辑代码
- )
复制代码
作者: cmd1152 时间: 2021-8-7 10:10
回复 6# xiaolijian916
<和>、=、/的转义问题
作者: xiaolijian916 时间: 2021-8-7 11:23
回复 7# cmd1152
不是特殊符号问题,html代码量过多导致的问题。我想知道怎么处理这种代码量过大的hta程序
作者: cmd1152 时间: 2021-8-7 12:21
回复 8# xiaolijian916
>在批处理中不会被认为是字符串(加"也没有用),除非在他的前面加^
作者: xiaolijian916 时间: 2021-8-7 14:54
回复 9# cmd1152
我楼上说了呀,不是特殊符号引起的问题,如果是那为什么代码量少的时候就能运行。。。
作者: cmd1152 时间: 2021-8-7 16:10
回复 10# xiaolijian916
试试这个- set htatxt='mshta "about:^<hta:application scroll^=no border^=thin maximizeButton^=no minimizeButton^=no showintaskbar^=no ^/^>!html!"'
- for /f "tokens=1,2 delims=^=" %%a in (!htatxt!) do (
- )
复制代码
作者: xiaolijian916 时间: 2021-8-7 19:19
真不是特殊符号引起的异常,如果异常,批处理直接闪退了。况且前面解释了很多遍,命令不长的时候是能够打开HTML页面的,并且显示正常。只有当HTML代码过长就不显示,直接跳过for循环返回了
作者: xiaolijian916 时间: 2021-8-7 19:20
本帖最后由 xiaolijian916 于 2021-8-7 19:21 编辑
图片地址:https://photo.weibo.com/34732307 ... 8fzq88rpj20n20b30tb
作者: xiaolijian916 时间: 2021-8-7 19:42
回复 11# cmd1152
请看我的最新回复
作者: cmd1152 时间: 2021-8-7 20:46
回复 14# xiaolijian916
那我就不知道了...
作者: xiaolijian916 时间: 2021-8-7 21:54
有人遇到类似的情况吗,网上找不到案例。求助
作者: xiaolijian916 时间: 2021-8-8 20:06
前辈们给个建议,像这种情况是不能解决吗,还是需要额外处理。
作者: xiaolijian916 时间: 2021-8-10 19:36
解决了:还是mshta写法问题。应该是 ’mshta "当前目录\*.hta"‘ 就可以了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |