我有vbs脚本:参数传递到.vbs的
Set WshShell = CreateObject("WScript.Shell")
WshShell.RUN "cmd /c r:\iprem.bat" & " " & Wscript.Arguments(0), 0
所以我运行此脚本,并通过一些数据作为参数。比我的bat文件处理这些数据。 我想把这个处理过的数据从蝙蝠传递回vbs,当然强制vbs脚本等待这些数据,直到它获得它才停止。
不知道如何做这两项任务。
任何人都可以帮我请。
我有vbs脚本:参数传递到.vbs的
Set WshShell = CreateObject("WScript.Shell")
WshShell.RUN "cmd /c r:\iprem.bat" & " " & Wscript.Arguments(0), 0
所以我运行此脚本,并通过一些数据作为参数。比我的bat文件处理这些数据。 我想把这个处理过的数据从蝙蝠传递回vbs,当然强制vbs脚本等待这些数据,直到它获得它才停止。
不知道如何做这两项任务。
任何人都可以帮我请。
设置您的.bat文件,以便它首先有这样一行:
cscript C:\YourScript.vbs
REM Do any other batch file processing here.
所以,而不是从您正在运行从蝙蝠的.vbs .VBS .BAT运行。
问题的答案取决于批处理文件对处理数据的处理。如果它将数据打印到标准输出,则可以使用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
你想达到什么目的?即整体大局/目标是什么?也许你想在简单的VBS中更容易:) – Jobbo
我的vbs脚本在从Windows注销时运行。我的蝙蝠脚本正在使用ssh与我的代理服务器连接。不幸的是,Windows在ssh结束之前关闭了连接。这是因为Windows完成vbs脚本 - 不等待蝙蝠。我想强迫它等待来自蝙蝠的某种确认。 – Kriss