将变量从vbs传递到bat并不会在批处理文件中显示完整值

时间:2014-05-24 13:58:41

标签: batch-file vbscript

我想从中获取当前文件夹路径 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传递的完整路径。

3 个答案:

答案 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

将显示没有引号的路径