Windows 如果路径包含空格,则无法启动bat文件表单VBScript
例如,我一直在尝试从一个路径启动myFileToRun.bat文件Windows 如果路径包含空格,则无法启动bat文件表单VBScript,windows,batch-file,vbscript,path,filepath,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 strCurr
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
谢谢大家的回答。这很有帮助。试着这样做:
Dim WshShell, strCurrentDirectory
Set WshShell = CreateObject("WScript.Shell")
strCurrentDirectory = WshShell.CurrentDirectory
WshShell.Run """" & strCurrentDirectory & "\di r\myFileToRun.bat" & """" , 0
Set WshShell = Nothing
可以使用此函数将双引号添加到变量中:
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
'********************************************************************
您只需要正确地转义字符串中的引号,规则是只要您想在字符串中显示双引号 那么这个命令,
WshShell.Run strCurrentDirectory & "\myFileToRun.bat" , 0
此时此刻将被传递为
D:\My Folder\batchfiles\myFileToRun.bat
与大多数Windows程序一样,带有空格的路径在传递时需要用引号括起来,以确保识别完整路径,此时Run()
正在查看
D:\My
其余部分作为参数传递给My
程序。由于系统无法找到My
程序,因此会导致
系统找不到指定的文件
错误
要解决这个问题,我们需要传递一个带引号的字符串(将要包含的每个文字引号的引号加倍)
将被通过为
“D:\My Folder\batchfiles\myFileToRun.bat”
注意:当与变量连接时,我们仍然需要正确地打开和关闭字符串。对于上述情况,我们将字符串“”
连接到一个变量上,该变量只是“”
,但有一个开头和结尾引号来表示文本字符串
此外,变量需要正确地连接到字符串,否则您将得到奇怪的结果,例如,您第一次尝试转义字符串
WshShell.Run """strCurrentDirectory & "\myFileToRun.bat" "", 0
会引起
预期报表结束
因为它不是一个正确终止的字符串。可能的重复项您只需要将任何您想要作为参数一部分的引号转义,您可以通过将它们加倍来实现。您的尝试不起作用,因为您忘记连接字符串(这就是为什么变量
strCurrentDirectory
get被添加为字符串的一部分,而不是它的值),请尝试以下操作-WshShell.Run”“&strCurrentDirectory&“\myFileToRun.bat”“,0
最后的&
是怎么回事?,无需连接,只需执行WshShell.Run''&strCurrentDirectory&“\di r\myFileToRun.bat”“,0
。这样做…一天结束时,它只是一个字符串&”“
不会执行任何”“
没有。@Lankymart-ahh正确。如果bat文件名被设置为变量,则最终可以使用。这确实是真的。@npocmaka工作正常,错误现在消失了。谢谢你的时间。谢谢。我已经试过了,但它仍然会抛出错误,因为strCurrentDirectory将被视为一个文本,路径将变为“strCurrentDirectory”\myFileToRun.batt这将不起作用,因为DblQuote()
函数需要是DblQuote=Chr(34)&Chr(34)&Str&Chr(34)&Chr(34)&Chr(34)
,您没有将引号加倍。@VikasVicky当您执行此命令时:wscript.echo DblQuote(strCurrentDirectory&“\myfolder\myFileToRun.bat”)
您得到了什么结果?@Lankymart实际上DblQuote()
函数在没有双引号的情况下工作。@Hackoo我想我没有正确调用该函数。现在很好用。非常感谢。它正确地将路径显示为“D:\My Folder\batchfiles\myFileToRun.bat”
感谢您的详细解释。明白了吗?@VikasVicky没问题很乐意帮忙。
WshShell.Run """strCurrentDirectory & "\myFileToRun.bat" "", 0