批处理创建包含&符号的VBS文件时出现报错该如何解决
问题根源
批处理中&是默认的命令拼接符,会被解析器优先识别为命令分隔标记,你写的&hAF会被拆分为前半段命令echo WshShell.SendKeys(chr(和后半段待执行的命令hAF)),因此会报找不到hAF))命令的错误。
在括号包裹的代码块中,批处理会先对整个块内的内容做一次预解析,直接用^&转义的话,预解析阶段会把转义符^也作为普通字符输出,所以最终生成的VBS文件里会残留^符号。
解决方案1:调整转义写法(适配原有代码结构)
在括号块内输出&需要用双层转义,同时对行尾的括号也做转义避免解析异常,修改后的代码如下:
( echo Set WshShell = CreateObject("WScript.Shell"^) echo WshShell.SendKeys(chr(^^&hAF^)^) )> KXV.vbs
运行后生成的KXV.vbs就会包含正确的chr(&hAF)内容,可正常实现音量调整功能。
解决方案2:无转义方案(适合包含大量特殊字符的场景)
如果后续要生成的VBS包含更多特殊字符,逐个转义成本过高,可以用「标签+内容提取」的方式完全避开转义问题,代码如下:
@echo off :: 提取本文件内的VBS内容写入目标文件 findstr /r /c:"^Set " /c:"^WshShell." "%~f0" > KXV.vbs :: 如需直接执行生成的VBS可取消下一行注释 :: cscript //nologo KXV.vbs exit /b :: 下方直接编写要生成的VBS原文,所有特殊字符无需转义 Set WshShell = CreateObject("WScript.Shell") WshShell.SendKeys(chr(&hAF))
该方案无需处理任何特殊字符,直接把要生成的VBS内容写在批处理末尾即可,可读性和可维护性更高。
内容的提问来源于stack exchange,提问作者Korrupt
相关产品推荐
相关产品推荐

