【问题标题】:Pass variable from Batch to VBS将变量从 Batch 传递到 VBS
【发布时间】:2014-01-09 06:49:58
【问题描述】:

您好,我正在尝试将用户输入变量从 BAT 传递到 VBS 脚本

我确定这可以在 VBS 中完成,但稍后在 BAT 文件中也会使用用户“文件名”输入

如您所见,.bat 部分中的 “FileName” 变量需要传递到文件路径的 VBS 脚本中(“C:\Users\bob\Documents\ %FileName%")

.蝙蝠

set /p FileName= Enter Filename Including Extention e.g. test.xlsx

VBS:

Set xlObj = CreateObject("Excel.Application")
Set xlFile = xlObj.WorkBooks.Open("C:\Users\xxx\Documents\%FileName%")
'turn off screen alerts
xlObj.Application.DisplayAlerts = False
'loop through sheets
For Each Worksheet In xlFile.Worksheets 
'change sheet to desired worksheet name
If Worksheet.Name = "Old111" Then
Worksheet.Name = "NewName111"
End if
Next
'save, close, then quit
xlFile.Close True
xlObj.Quit

【问题讨论】:

    标签: variables batch-file parameters vbscript


    【解决方案1】:

    我不建议通过环境变量将信息从一个脚本传递到另一个脚本。我想您正在从批处理脚本运行 VBScript?在这种情况下,您可以简单地将文件名作为参数传递给 VBScript:

    set /p "FileName= Enter Filename Including Extention (e.g. test.xlsx): "
    cscript.exe //NoLogo C:\path\to\your.vbs "%FileName%"
    

    在 VBScript 中,您可以像这样处理参数:

    filename = WScript.Arguments.Unnamed(0)
    

    您也可以使用名称参数:

    set /p "FileName= Enter Filename Including Extention (e.g. test.xlsx): "
    cscript.exe //NoLogo C:\path\to\your.vbs /filename:"%FileName%"
    

    VBScript 中的参数评估如下所示:

    filename = WScript.Arguments.Named("filename")
    

    【讨论】:

    • 有什么理由避免环境变量传递数据?我知道 Arguments 集合是用来处理参数的,但是,当数据在环境变量中时,为什么要避免它们呢?
    • @MCND 参数更容易处理 IMO,因为这样可以清楚地知道哪些信息从哪里传递到哪里。使用环境变量将信息从一个进程传输到另一个进程对我来说总是有点侧通道的感觉。
    • 请注意,命名/未命名属性仅适用于 WSH 5.6 及更高版本 (msdn.microsoft.com/en-us/magazine/cc302057.aspx)。你会认为没有人再使用 Windows 2000,但遗憾的是他们仍然在使用(而且他们也在这里发布问题!)
    • 如何使用这个字符串中的变量?设置 xlFile = xlObj.WorkBooks.Open("C:\Users\xxx\Documents\FileName")
    • @user2770724 像这样:Set xlFile = xlObj.WorkBooks.Open("C:\Users\xxx\Documents\" & filename).
    【解决方案2】:

    几乎所有事情都可以用 vbs 完成。你不需要批处理

    要从 vbs 获取用户输入,您可以使用标准输入。从here复制。

    ' Read a single line into a variable
    Dim strMyName
    WScript.StdOut.Write("Enter Your full Name>")
    WScript.StdIn.Read(0)
    strMyName = WScript.StdIn.ReadLine()
    WScript.StdOut.Write(strMyName)
    

    【讨论】:

    • 需要同时使用 Bat 和 VBS,因为 BAT 已经有大量使用 FileName 变量的代码
    【解决方案3】:
    WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%FileName%")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-23
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 2012-12-02
      • 2013-08-24
      • 1970-01-01
      相关资源
      最近更新 更多