使用WScript.Shell Run方法时含空格路径报错求助
解决WScript.Shell Run方法处理带空格路径的报错问题
我来帮你搞定这个头疼的空格路径问题!你遇到的核心问题是没有正确给带空格的可执行文件路径单独包裹双引号,而是错误地包裹了整个命令,或者用了不被识别的单引号。
先拆解下你之前写法的问题:
- 第一种写法把整个命令都用双引号包起来,导致系统无法正确区分可执行文件和参数;
- 第二种写法完全没加引号,系统会把
Program当成可执行文件,自然找不到; - 第三种用单引号包裹,WScript.Shell不认可单引号作为路径的分隔符;
- 第四种和第二种一样,没给带空格的路径加引号。
正确的两种写法
写法1:用双引号转义包裹可执行文件路径
在VBScript里,要在字符串里输出一个双引号,需要用两个双引号来转义。我们只需要给带空格的PsExec64.exe路径单独加双引号,参数直接跟在后面就行:
CreateObject("WScript.Shell").Run """Program Files\scripts\exe\PsExec64.exe"" -accepteula -realtime -d c:\windows\system32\RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 264", 0, True
这里的""Program Files...exe""会被解析为"Program Files...exe",系统就能正确识别这个带空格的可执行文件路径了。
写法2:用Chr(34)表示双引号(更易读)
如果觉得双引号转义看着晕,可以用Chr(34)来代替双引号(Chr(34)是双引号的ASCII码),代码结构更清晰:
Dim objShell Set objShell = CreateObject("WScript.Shell") ' 给带空格的路径包裹双引号 Dim psexecCmd psexecCmd = Chr(34) & "Program Files\scripts\exe\PsExec64.exe" & Chr(34) ' 拼接参数并执行 objShell.Run psexecCmd & " -accepteula -realtime -d c:\windows\system32\RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 264", 0, True
关键要点
WScript.Shell的Run方法规则很明确:只有带空格的可执行文件路径需要用双引号包裹,后面的命令参数不需要和可执行文件放在同一个引号里。只要把可执行文件路径单独包好,系统就能正确解析整个命令行啦。
内容的提问来源于stack exchange,提问作者user8688718
相关产品推荐
相关产品推荐

