我有vbs脚本:
Set WshShell = CreateObject("WScript.Shell")
WshShell.RUN "cmd /c r:\iprem.bat" & " " & Wscript.Arguments(0), 0
所以我运行这个脚本并传递一些数据作为参数。比我的bat文件处理这个数据。 我想将这个经过处理的数据从bat传递回vbs,当然还要强制vbs脚本等待那些数据并且在它获取之前不会停止。
不知道如何完成这两项任务。
任何人都可以帮助我。
答案 0 :(得分: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
答案 1 :(得分:0)
设置.bat文件,使其先行:
cscript C:\YourScript.vbs
REM Do any other batch file processing here.
因此,不是从.vbs运行.bat而是从.bat运行.vbs。