如果path包含空格,则无法从VBScript启动bat文件

例如,我一直在尝试从path启动myFileToRun.bat文件

D:\My Folder\batchfiles\myFileToRun.bat 

下面是我试图运行它的VBScript。

 Dim WshShell, strCurrentDirectory Set WshShell = CreateObject("WScript.Shell") strCurrentDirectory = WshShell.CurrentDirectory WshShell.Run strCurrentDirectory & "\myFileToRun.bat" , 0 Set WshShell = Nothing 

我不能够运行它,因为VBS是错误的说“系统找不到指定的文件”我已经尝试了其他类似的post在其他论坛中提到的各种方法。 他们大部分都说要加双引号。

注意:我已经尝试添加双引号,例如双引号

 1.WshShell.Run """strCurrentDirectory & "\myFileToRun.bat" "", 0 2.WshShell.Run """"strCurrentDirectory & "\myFileToRun.bat"""", 0 3.WshShell.Run """"strCurrentDirectory & \myFileToRun.bat"""", 0 

他们都没有工作,我想我是在错误的地方报价。 variablesstrCurrentDirectory更改为“strCurrentDirectory”而不是“D:\ My Folder \ batchfiles”,所以我的最终path将是“strCurrentDirectory”“\ myFileToRun.bat”,这是错误的。 我需要的path是“D:\我的文件夹\ batchfiles \ myFileToRun.bat”和文件来运行。

我还没有真正理解这些加引号的概念。 那么你能否向我解释一下这个概念,并帮助我解决这个错误。

编辑:我有解决scheme。 因为我不得不引用当前目录,所以我只是简化了脚本。

 Dim WshShell Set WshShell = CreateObject("WScript.Shell") WshShell.Run "myFileToRun.bat", 0 Set WshShell = Nothing 

谢谢大家的答案。 这是有帮助的。

尝试像这样:

 Dim WshShell, strCurrentDirectory Set WshShell = CreateObject("WScript.Shell") strCurrentDirectory = WshShell.CurrentDirectory WshShell.Run """" & strCurrentDirectory & "\di r\myFileToRun.bat" & """" , 0 Set WshShell = Nothing 

你只需要在字符串中正确地转义引号,规则就是每当你想在一个字符串中显示一个引号时,就把它加倍。

所以,这个命令

 WshShell.Run strCurrentDirectory & "\myFileToRun.bat" , 0 

此刻将通过为;

 D:\My Folder\batchfiles\myFileToRun.bat 

与大多数Windows程序一样,当传递路径时,需要用空格引用包含空格的路径,以确保完整路径得到识别,此时Run()正在显示

 D:\My 

剩下的作为参数传递给My程序。 由于系统将无法找到My程序,这将导致

系统找不到指定的文件

错误。

为了解决这个问题,我们需要传递一个带引号的字符串(把我们想要包含的每个字面引号的引号加倍)

 WshShell.Run """" & strCurrentDirectory & "\myFileToRun.bat""", 0 

这将通过为;

 "D:\My Folder\batchfiles\myFileToRun.bat" 

注意:当与变量连接时,我们仍然需要正确打开和关闭字符串。 对于上面的情况,我们把字符串""""连接到一个变量上,这个变量只是""但是用开始和结束引号来表示文字字符串。

也需要将变量正确连接到字符串,否则会得到奇怪的结果,例如您第一次尝试转义字符串

 WshShell.Run """strCurrentDirectory & "\myFileToRun.bat" "", 0 

会导致;

预期结束的声明

因为它不是正确结束的字符串。

你可以使用这个函数把双引号加到变量中:

 Function DblQuote(Str) DblQuote = Chr(34) & Str & Chr(34) End Function 

所以,代码变得容易阅读:

 Dim WshShell, strCurrentDirectory Set WshShell = CreateObject("WScript.Shell") strCurrentDirectory = WshShell.CurrentDirectory wscript.echo DblQuote(strCurrentDirectory & "\My Folder\myFileToRun.bat") WshShell.Run DblQuote(strCurrentDirectory & "\My Folder\myFileToRun.bat"),0 Set WshShell = Nothing '******************************************************************** Function DblQuote(Str) DblQuote = Chr(34) & Str & Chr(34) End Function '********************************************************************