【问题标题】:Passing variable from vbs to bat does not showing full value in batch file将变量从 vbs 传递到 bat 未在批处理文件中显示完整值
【发布时间】:2014-07-13 19:04:44
【问题描述】:

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

【问题讨论】:

    标签: batch-file vbscript


    【解决方案1】:

    我认为你需要添加一个:

    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)
    

    【讨论】:

    • 如果您更改代码以使用正确的连接运算符 (&),我将支持您的答案。
    【解决方案2】:
    WshShell.run "a.bat " & Chr(34) & CD & Chr(34)
    WshShell.run "a.bat """ & CD & """"
    

    一个带有空格的字符串,当作为参数传递给批处理文件时,作为两个字符串被接收。因此,有必要将其括在引号中以仅将其作为一个参数传递。

    然后在批处理文件中,您将获得带引号的路径。所以从批处理文件中

    echo %1
    

    将显示引用的路径和

    echo %~1
    

    将显示不带引号的路径

    【讨论】:

      【解决方案3】:

      你需要(双)引用路径

      WshShell.run "a.bat " & """" & CD & """"
      

      否则 CD 的每个空格分隔部分将作为一个参数传递。

      你可以使用类似的函数

      Function qq(s)
        qq = """" & s & """"
      End Function
      

      为了避免更复杂的连接中的噪音。

      WshShell.run "a.bat " & qq(CD)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-19
        • 1970-01-01
        • 2020-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多