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

时间:2016-05-16 12:52:42

标签: windows batch-file vbscript path filepath

我一直试图从路径启动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正在发出错误说"系统无法找到指定的文件" 我已经尝试过stackoverflow和其他论坛中其他类似帖子中提到的各种方法。大多数人都说要加双引号。

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

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

他们都没有工作,因为我猜我在错误的地方给出了引号。变量strCurrentDirectory更改为" strCurrentDirectory"而不是" D:\ My Folder \ batchfiles"所以我的最终路径是" strCurrentDirectory"" \ myFileToRun.bat",这是错误的。我需要路径为" D:\ My Folder \ batchfiles \ myFileToRun.bat"和要运行的文件。

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

编辑:我有解决方案。因为我必须引用当前目录,所以我只是简化了脚本。

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

谢谢大家的回答。这很有帮助。

3 个答案:

答案 0 :(得分:2)

尝试这样:

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

答案 1 :(得分:2)

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

所以,这个命令

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

会导致;

  

预期声明结束

因为它不是正确终止的字符串。

答案 2 :(得分:1)

您可以使用此功能将双引号添加到变量中:

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
'********************************************************************