vbscript - 在 VBScript/JScript 中为控制台应用程序编写代理启动器
问题描述
我想通过将其包装到可检查的脚本中来更改传递给应用程序的一些参数。
CMD.exe 不在列表中,因为它损坏了原始参数列表(=
, ,
&;
被视为命令分隔符,呈现--opt=val
为--opt
+ val
)。
Wscript.Shell
我虽然对 JScript 感兴趣,但对使用Run
+Exec
和Shell.Application
创建ShellExecute
新窗口而不是附加到现有控制台这一事实感到沮丧。
包装器将 STDIO 控制传递给已启动的应用程序至关重要。.cmd
常规批处理文件遵循这样的语义,即使应用程序是通过包装器调用的,应用程序的 CLI 管道也会继续工作。
解决方案
你在寻找这样的东西吗?
启动应用程序.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 之前对其进行修改以更改命令行参数。
推荐阅读
- graphviz - 使用 rank=same 时丢失 xy 边缘
- css - 在不丢失默认浏览器功能的情况下使用 XML 样式表
- reactjs - 使用 onAccept 属性反应 Imask 输入组件重新渲染问题
- kubernetes - 如何在 GKE 入口 nginx 中设置域
- sql - 使用 SQLPLUS/shell 将数据从一个数据库复制到另一个数据库
- laravel - Laravel 自动保存事件
- flutter - D8:程序类型已经存在:com.google.protobuf.AbstractMessageLite$Builder$LimitedInputStream
- php - 使用通道在另一个文件中使用 laravel 记录::info
- visual-studio - 有没有办法设置键盘快捷键以在 Visual Studio 的解决方案资源管理器中打开包含选定文件的文件夹?
- python-3.x - Python:从列表中检索信息