Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如果路径包含空格,则无法启动bat文件表单VBScript_Windows_Batch File_Vbscript_Path_Filepath - Fatal编程技术网

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

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

例如,我一直在尝试从一个路径启动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
谢谢大家的回答。这很有帮助。

试着这样做:

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