我想从中获取当前文件夹路径 vbs文件正在运行的位置,并将其存储到变量中 然后将变量传递给批处理文件。
我的VBS是:
dim fso: set fso = CreateObject("Scripting.FileSystemObject")
CD = fso.GetAbsolutePathName(".")
dim WshShell
set WshShell=Wscript.CreateObject("Wscript.shell")
WshShell.run "a.bat " & CD
我的BAT代码是:
@echo off
echo get path is='%1'
pause
exit
VbS正在运行,但问题是文件夹是否正常 “c:\ Program Files \”批处理文件只回显“C:\ Program”
如何获取从vbs传递的完整路径。
答案 0 :(得分:2)
我认为你需要添加一个:
CD = """" & CD & """"
这将有助于字符串在批处理文件解释时被解释为整体。 (您将传递"C:\Program Files\"
而不是C:\Program Files\
,这将被解释为a.bat "C:\Program" "Files\"
)
例如:
'Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
CD = """" & fso.GetAbsolutePathName(".") & """"
'Dim WshShell
'Set WshShell=Wscript.CreateObject("Wscript.shell")
'WshShell.run "a.bat " & CD
或:
'Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
'CD = fso.GetAbsolutePathName(".")
CD = """" & CD & """"
'Dim WshShell
'Set WshShell=Wscript.CreateObject("Wscript.shell")
'WshShell.run "a.bat " & CD
或者像Ekkehard.Horner和MC ND指出的那样:
'Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
'CD = fso.GetAbsolutePathName(".")
'Dim WshShell
'Set WshShell=Wscript.CreateObject("Wscript.shell")
WshShell.run "a.bat " & """" & CD & """"
正如MC ND使用的那样,如果您认为更容易阅读,则可以将""""
替换为char(34)
。
为了进一步提高可读性,正如Ekkehard.Horner建议的那样,你可以创建一个函数:
Function qq(s)
qq = """" & s & """"
End Function
并用作:
'Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
'CD = fso.GetAbsolutePathName(".")
'Dim WshShell
'Set WshShell=Wscript.CreateObject("Wscript.shell")
WshShell.run "a.bat " & qq(CD)
答案 1 :(得分:1)
你需要(双)引用路径
WshShell.run "a.bat " & """" & CD & """"
否则每个空格分隔的CD部分将作为一个参数传递。
你可以使用像
这样的功能Function qq(s)
qq = """" & s & """"
End Function
避免更复杂的连接中的噪音。
WshShell.run "a.bat " & qq(CD)
答案 2 :(得分:1)
WshShell.run "a.bat " & Chr(34) & CD & Chr(34)
WshShell.run "a.bat """ & CD & """"
当作为参数传递给批处理文件时,其中包含空格的字符串将作为两个字符串接收。因此,有必要将其括在引号中以将其作为一个参数传递。
然后在批处理文件中,您将获得带引号的路径。所以从批处理文件
echo %1
将显示引用的路径和
echo %~1
将显示没有引号的路径