VBScript等效于运行
my.exe --a=20 --b=NORMAL < file.txt
在CMD中?
当尝试通过VBScript中的WScript.Shell
对象将文件作为输入流(不确定它被调用的内容)传递给.exe时,似乎{ {1}}部分被解释为参数列表的一部分(而不是输入流)。
< file.txt
上面的代码与顶部的命令行参数的工作方式不同。
答案 0 :(得分:2)
为了完整起见(因为这只是在评论中暗示过)。运行该命令不起作用,因为输入重定向(或者更确切地说是I / O重定向)是CMD内置功能。您需要使用CMD.exe
运行命令才能使其正常工作:
objShell.Run "%COMSPEC% /c my.exe --a=20 --b=NORMAL < file.txt"
在大多数情况下,CMD redirection比使用WshScriptExec
对象更容易处理并且更不容易出错,除非您需要脚本与命令行程序进行交互。
答案 1 :(得分:1)
您可以像lankymart一样说并使用cmd.exe
将>
解释为文件重定向。 cmd /?
显示您使用/c
或/k
切换。所以cmd /c dir > file.txt
。
VBScript方法是使用返回wshscriptexec
对象的Exec方法,允许您访问stdout。
来自帮助
在子命令shell中运行应用程序,提供对StdIn / StdOut / StdErr流的访问。
object.Exec(strCommand)
对象 WshShell对象。
strCommand 字符串值,指示用于运行脚本的命令行。命令行应该与在命令提示符下键入命令行时完全相同。
imageRemarks Exec方法返回一个WshScriptExec对象,该对象提供有关使用Exec运行的脚本的状态和错误信息,以及对StdIn,StdOut和StdErr通道的访问。 Exec方法仅允许执行命令行应用程序。 Exec方法不能用于运行远程脚本。不要将Exec方法与(WshRemote对象的)Execute方法混淆。
来自帮助阅读StdOut的样本
Dim WshShell, oExec, input
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("test.bat")
input = ""
Do While True
If Not oExec.StdOut.AtEndOfStream Then
input = input & oExec.StdOut.Read(1)
If InStr(input, "Press any key") <> 0 Then Exit Do
End If
WScript.Sleep 100
Loop
oExec.StdIn.Write VbCrLf
Do While oExec.Status <> 1
WScript.Sleep 100
Loop