【问题标题】:Not able to launch bat file form VBScript if path contains a space如果路径包含空格,则无法从 VBScript 启动 bat 文件
【发布时间】:2016-05-16 12:52:42
【问题描述】:

例如,我一直在尝试从路径启动 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

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

【问题讨论】:

  • 你只需要转义任何你想要的引号作为参数的一部分,你可以通过将它们加倍""来做到这一点。您的尝试不起作用,因为您忘记连接字符串 (这就是为什么变量 strCurrentDirectory get 被添加为字符串的一部分而不是它的值),试试这个 - WshShell.Run """" & strCurrentDirectory & "\myFileToRun.bat""", 0

标签: windows batch-file vbscript path filepath


【解决方案1】:

试试这样:

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 & "\di r\myFileToRun.bat""", 0
  • 那是什么...一天结束,它只是一个字符串 & """" 什么都没有,""" 没有。
  • @Lankymart - 嗯,没错。如果 bat 文件名设置为变量,最终可以使用。
  • 确实如此。
  • @npocmaka 它工作正常,现在错误消失了。珍惜你的时间。谢谢。
【解决方案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

会导致;

预期语句结束

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

【讨论】:

  • 感谢您如此详细的解释。有一个清晰的认识。
  • @VikasVicky 没问题很乐意提供帮助。
【解决方案3】:

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

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

【讨论】:

  • 我已经尝试过了,它仍然会抛出错误,因为 strCurrentDirectory 将被视为文字,路径将变为 "strCurrentDirectory"\myFileToRun.bat
  • 那行不通,因为DblQuote() 函数必须是DblQuote = Chr(34) & Chr(34) & Str & Chr(34) & Chr(34),你不能加倍引号。
  • @VikasVicky 当你执行这个:wscript.echo DblQuote(strCurrentDirectory & "\My Folder\myFileToRun.bat")你得到了什么结果?
  • @Lankymart 实际上 DblQuote() 函数在没有双双引号的情况下工作。
  • @Hackoo 我想我没有正确调用该函数。现在工作正常。谢谢你。它将路径正确显示为"D:\My Folder\batchfiles\myFileToRun.bat"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 2014-09-01
  • 2013-05-04
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多