WScript.Shell忽略转义引号导致脚本执行报错求助
解决WScript.Shell执行带空格路径命令的报错问题
我来帮你搞定这个问题——这个引号嵌套的坑我之前也踩过好几次!
问题根源
你遇到的错误是因为WScript.Shell的Run方法对嵌套引号的解析逻辑和直接在CMD里执行不一样。虽然你拼接后的命令在CMD里能正常运行,但VBS的Run方法在处理%comspec% /k后面带空格的路径时,没有正确识别引号的边界,导致它把C:\Program当成了要执行的命令,自然就报错了。
解决方案
这里给你两种可靠的解决办法,选哪个都行:
方法1:调整Run命令的引号嵌套格式
把%comspec% /k后面的整个命令用额外的一层引号包裹,同时内部的引号用双引号转义(VBS里用两个""表示一个实际的")。修改后的脚本如下:
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "%comspec% /k """ & _ """C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TF.exe"" " & _ "move ""C:\Automation\Custom_UiPath_Activities\NuPackages\*.nupkg"" ""C:\Automation\Custom_UiPath_Activities\NuPackages\Old""", 1, True
这样Run方法就能正确识别整个命令的边界,不会把带空格的路径拆错。
方法2:改用ShellExecute方法(更推荐)
ShellExecute方法对带空格的路径处理更友好,不需要绕%comspec%中转,直接指定要执行的程序和参数就行,逻辑更清晰:
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.ShellExecute _ "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TF.exe", _ "move ""C:\Automation\Custom_UiPath_Activities\NuPackages\*.nupkg"" ""C:\Automation\Custom_UiPath_Activities\NuPackages\Old""", _ "", "open", 1
这个写法避免了复杂的引号嵌套,出错概率更低。
验证
你可以随便选一种方法修改脚本,运行后应该就能正常执行TF.exe的move命令了。
内容的提问来源于stack exchange,提问作者Patrick Steffensen
相关产品推荐
相关产品推荐

