【发布时间】:2021-03-02 09:12:59
【问题描述】:
我正在编写一个运行某些 CMD 命令的自动热键脚本。考虑到其他因素,最后还是得用之前没学过的ComObject来做。但归根结底,这个问题是关于 CMD 命令的。
abc 是一个 3 行的变量字符串,代表 3 个命令。此代码将运行这 3 个命令然后退出。 请看一下:原来是"exec := shell.Exec(ComSpec " /Q /K echo off")",所以cmd窗口是完全隐藏的,所以我把它改成了" /K echo on",现在可以看到了CMD 窗口,有标题,3 个命令全部运行成功,但在整个过程中,这个 CMD 窗口中没有任何文字。我该如何解决?
abc := "xxxxxx"
RunWaitMany(abc)
RunWaitMany(commands) {
shell := ComObjCreate("WScript.Shell")
; Open cmd.exe with echoing of commands disabled
exec := shell.Exec(ComSpec " /K echo on")
; Send the commands to execute, separated by newline
exec.StdIn.WriteLine(commands "`nexit") ; Always exit at the end!
; Read and return the output of all commands
return exec.StdOut.ReadAll()
}
【问题讨论】:
-
嗯。
exit关闭cmd进程。你这样做ReadAll之后。 AHK 真的能够从不再存在的进程中读取任何内容吗? -
@Stephan 退出并不意味着 com 对象不再存在。该代码按预期工作,实际上是 AHK 文档中示例的直接复制粘贴。我认为 OP 只是想把错误的东西用于他想要的东西。
标签: cmd com autohotkey