首页 > 解决方案 > 在 VBScript/JScript 中为控制台应用程序编写代理启动器

问题描述

我想通过将其包装到可检查的脚本中来更改传递给应用程序的一些参数。

CMD.exe 不在列表中,因为它损坏了原始参数列表(=, ,&;被视为命令分隔符,呈现--opt=val--opt+ val)。

Wscript.Shell我虽然对 JScript 感兴趣,但对使用Run+ExecShell.Application创建ShellExecute 新窗口而不是附加到现有控制台这一事实感到沮丧。

包装器将 STDIO 控制传递给已启动的应用程序至关重要。.cmd常规批处理文件遵循这样的语义,即使应用程序是通过包装器调用的,应用程序的 CLI 管道也会继续工作。

标签: vbscriptjscriptwscript.shell

解决方案


你在寻找这样的东西吗?

启动应用程序.vbs

Dim args : args = ""
For Each arg In WScript.Arguments
    If ("" = args) Then
        args = arg
    Else
        args = args & " " & arg
    End If
Next

WScript.StdOut.WriteLine "You are using these args: " & args

Dim o, e
With WScript.CreateObject("WScript.Shell")
    With .Exec(.ExpandEnvironmentStrings("%COMSPEC% /c application.exe " & args))
        o = .StdOut.ReadAll()
        e = .StdErr.ReadAll()
    End With
End With

WScript.StdOut.WriteLine "StdOut: " & o
WScript.StdOut.WriteLine "StdErr: " & e

然后使用cscript.exe. 例如:

cscript.exe launchApplication.vbs --opt=val

假设您的控制台application.exe实际上接受--opt=val,那么上述脚本应该能够捕获用于调用 application.exe 的命令行参数,以及来自 application.exe 的 stdout 和 stderr。

如果需要,还可以在执行 application.exe 之前对其进行修改以更改命令行参数。


推荐阅读