传递"<文件路径"作为.exe

时间:2016-06-03 07:09:40

标签: vbscript cmd

VBScript等效于运行

my.exe --a=20 --b=NORMAL < file.txt

在CMD中?

当尝试通过VBScript中的WScript.Shell对象将文件作为输入流(不确定它被调用的内容)传递给.exe时,似乎{ {1}}部分被解释为参数列表的一部分(而不是输入流)。

< file.txt

上面的代码与顶部的命令行参数的工作方式不同。

2 个答案:

答案 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