【问题标题】:What's the difference between Run command and commands in cmd?运行命令和cmd中的命令有什么区别?
【发布时间】:2015-12-04 21:22:01
【问题描述】:

我有以下脚本:

^!c::
Run stop
Return

Stop 被配置为通过环境变量运行程序。

因此,如果我打开 cmd 并键入“stop”并按 Enter 键,程序会按预期打开,即使我按下 winkey + R 它也会做同样的事情。但是,如果我将脚本与 ctrl+alt+c 一起使用。我没有得到相同的结果。

为什么脚本做了不同的事情?

如何更改我的脚本,使其行为方式与输入 cmd 或 winkey + R 的方式相同?

【问题讨论】:

  • 也许run cmd /c stop
  • /c 有什么作用?也没有运气
  • stop 是批处理文件吗? “配置”是什么意思?
  • 是的,它是一个 bat 文件,我不完全理解它,但我安装了一些程序并更改了一些环境变量,现在当我输入 stop 时,它会以某种方式自动找到正确的文件。
  • 我放弃了。根据我的经验,run 命令会使用相同的命令行启动任何可以通过Run 对话框启动的内容。

标签: autohotkey


【解决方案1】:

简单

run, %comspec% /c stop

或者如果这不起作用,您可以启动一个 cmd 窗口并直接发送它

run, %comspec% /k
WinWait, %comspec%
WinActivate
Send stop{Enter}

/c 告诉控制台窗口在执行后关闭,/k 让它保持打开状态

或者您可以使用 COM 对象,甚至获得输出。

objShell := ComObjCreate("WScript.Shell")
objExec := objShell.Exec(ComSpec " /c stop")

strStdOut := ""
while, !objExec.StdOut.AtEndOfStream
{
    strStdOut := objExec.StdOut.ReadAll()
}

更新: 完全没有运行命令:

SetTitleMatchMode, 2

send #r

WinWait, TITLE_OF_THE_RUN_WINDOW
WinActivate

send cmd{Enter}

WinWait, cmd.exe
WinActivate

WinGetTitle, title
Send stop{Enter}

WinWait, %title%,,, stop
WinClose,

TITLE_OF_THE_RUN_WINDOW 将其替换为在 Win+r 上打开的窗口的标题。 windows cmd 窗口在执行时在其标题中包含该命令。所以我们保存命令窗口的标题,然后等待它放下命令(“停止”)然后关闭它。

更新:解决方案 4 添加了 Cmd 窗口关闭

【讨论】:

  • 我得到一个“系统找不到指定的路径”
  • 用“cmd.exe”代替 Comspec 变量尝试 i
  • 是的,它启动得很好,如果我在那里输入“stop”,它就会启动我的 bat 文件
  • 更新了分析器并添加了另一种方法。
  • 当我用 100 毫秒的睡眠替换 winwait 和 winactivate 时,最后一个工作正常。 cmd完成后有没有办法关闭?
猜你喜欢
  • 2023-01-26
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2011-11-23
  • 1970-01-01
  • 2013-08-11
相关资源
最近更新 更多