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

acruukt9  于 2023-10-22  发布在  Windows
关注(0)|答案(4)|浏览(171)

我一直试图启动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正在thowing错误sayin“系统无法找到指定的文件”我已经尝试了各种方法中提到的其他类似职位在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

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

gopyfrb3

gopyfrb31#

试着这样做:

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

ipakzgxi2#

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

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

会导致;
预期语句结束
因为它不是正确终止的字符串。

pepwfjgg

pepwfjgg3#

您可以使用此函数向变量添加双引号:

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

yftpprvb4#

已经尝试了所有上述方法,用于在Windows 7 PC上正常工作的VBScript文件,并在Windows 10 PC上失败。VBScript接受字符串中的空格,但不接受“run”方法中的空格。使用诸如以下的行进行排序
wss = WScript. Shell Object(“WScript.Shell”)
wss.run =“C:\Program Files\xxx.exe”
会惨败在这种情况下,解决方案很简单:你定义一个链接到xxx,xxx.lnk,将它存储在一个路径中没有空格的文件夹中,例如
C:\用户\链接
然后在VBScript中使用
wss.run =“C:\Users\Links\xxx.lnk”
这将工作,但对于一些更复杂的VBScript的返工可能是主要的。可惜。虫子就是虫子。

相关问题