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

问题描述 投票:0回答:4

我一直在尝试从路径启动 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 atchfiles”,因此我的最终路径将是“strCurrentDirectory”“\myFileToRun.bat”,这是错误的。我需要路径为“D:\我的文件夹atchfiles\myFileToRun.bat”和要运行的文件。

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

编辑:我已经找到解决方案了。由于我必须引用当前目录,因此我只是使脚本变得更简单。

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

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

windows batch-file vbscript path filepath
4个回答
2
投票

尝试这样:

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

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

会导致;

预计声明结束

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


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

0
投票

已针对 VBScript 文件尝试了上述所有方法,这些方法在 Windows 7 PC 上运行正常,但在 Windows 10 PC 上却严重失败。 VBScript 接受字符串内的空格,但不接受“run”方法中的空格。 带有诸如

行的脚本

wss = WScript.CreateObject("WScript.Shell")

wss.run =“C:\Program Files\xxx.exe”

会惨败。在这种情况下,解决方案很简单: 您定义了一个指向 xxx、xxx.lnk 的链接,将其存储在路径中没有空格的文件夹中,例如

C:\用户\链接

然后在 VBScript 中使用

wss.run = "C:\Users\Links\xxx.lnk"

这可行,但对于一些更复杂的 VBScript,返工可能会很严重。遗憾。 错误就是错误。

最简单的方法是为路径的每个非空格部分定义一个变量,为空格(Chr(32))定义一个变量,然后连接。 没办法:“找不到文件”。 唯一的解决方案:对于带有空格的路径中的每个文件的引用,都有一个指向它的 .lnk 并位于不带空格的路径中(例如 C:\Users )。非常麻烦。 这明显是一个

© www.soinside.com 2019 - 2024. All rights reserved.