【问题标题】:Parameter pass from .bat to .vbs从 .bat 到 .vbs 的参数传递
【发布时间】:2014-02-24 13:22:04
【问题描述】:

我有 vbs 脚本:

Set WshShell = CreateObject("WScript.Shell")
WshShell.RUN "cmd /c r:\iprem.bat" & " " & Wscript.Arguments(0), 0

所以我运行这个脚本并传递一些数据作为参数。比我的 bat 文件处理这些数据。 我想将处理后的数据从 bat 传回 vbs,当然还要强制 vbs 脚本等待该数据,直到它得到它才停止。

不知道如何完成这两项任务。

谁能帮帮我。

【问题讨论】:

  • 你想达到什么目的?即总体大图/目标是什么?也许你想要的在普通的 VBS 中更容易:)
  • 我的 vbs 脚本在从 Windows 注销期间运行。我的 bat 脚本正在使用 ssh 与我的代理服务器连接。不幸的是,在 ssh 完成之前 Windows 正在关闭连接。这是因为 windows 完成 vbs 脚本 - 不等待 bat。我想强迫它等待来自 bat 的某种确认。

标签: batch-file vbscript


【解决方案1】:

您的问题的答案取决于批处理文件对已处理数据的作用。如果它将数据打印到 STDOUT,您可以使用 Exec 方法而不是 Run 并在批处理文件完成后从 StdOut 读取输出。

Set sh = CreateObject("WScript.Shell")

Set iprem = sh.Exec("cmd /c r:\iprem.bat " & Wscript.Arguments(0))

Do While iprem.Status = 0
  WScript.Sleep 100
Loop

result = iprem.StdOut.ReadAll

不过,这将短暂显示一个 CMD 窗口,因为 Exec 方法不允许运行隐藏进程。如果您想避免这种情况,您必须坚持使用 Run 方法并将输出重定向到临时文件,例如像这样:

Set sh  = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

outfile = sh.ExpandEnvironmentStrings("%Temp%\tempfile.txt")

sh.Run "cmd /c r:\iprem.bat " & Wscript.Arguments(0) & " >" & outfile, 0, True

result = fso.OpenTextFile(outfile).ReadAll

fso.DeleteFile outfile

【讨论】:

    【解决方案2】:

    设置您的 .bat 文件,使其首先包含这一行:

    cscript C:\YourScript.vbs
    
    REM Do any other batch file processing here.
    

    因此,不是从 .vbs 运行 .bat,而是从 .bat 运行 .vbs。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2012-12-02
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      相关资源
      最近更新 更多