打开 CMD 窗口,从 CMD 窗口运行批处理文件,然后关闭 CMD 窗口

打开 CMD 窗口,从 CMD 窗口运行批处理文件,然后关闭 CMD 窗口

我曾尝试搜索如何执行此操作的示例,但没有成功,包括使用 autohotkey(我对 AHK 非常陌生)。我想做的是在我所在的资源管理器位置打开一个命令窗口,运行位于“path”环境变量搜索的位置的批处理程序,然后关闭命令窗口。我在 AHK 中尝试过的操作是:

LWin & Return::

if WinActive("ahk_class CabinetWClass")

or WinActive("ahk_class ExploreWClass")

{

  Send {Shift Down}{AppsKey}{Shift Up}

  Sleep 10

  Send w{enter}

  Sleep 10

  run fp.bat

  Sleep 10

Send,{LAlt Down}{Space Down}{Space Up}{LAlt Up}{c Down}

}

else

{

  run, cmd, C:\

}

return

命令窗口确实正确打开,但是批处理文件似乎在打开的命令窗口之外运行,并且资源管理器窗口关闭而不是命令窗口关闭。

我正在运行 Windows 10 Pro

我非常接近使用上面包含的 AHK 脚本要实现的目标。我试图用它做的是让 KB 组合“Windows 键”和“回车键”在当前资源管理器位置打开一个命令窗口,我正在其中的资源管理器 GUI 窗口中工作,在那里运行特定的批处理文件(在我的情况下是 fp.bat),然后关闭之前打开的命令窗口,让我返回到我开始的资源管理器 GUI 窗口。

我的 AHK 脚本出现的情况是,命令窗口成功打开,但批处理文件运行时,它不在打开的命令窗口中运行,而是像我刚从搜索/运行框中运行一样运行(我看到另一个窗口快速闪烁并关闭),然后资源管理器窗口关闭而不是命令窗口 - 让我在正确的位置打开一个命令窗口,但没有运行批处理文件。当执行第 2 步和第 3 步(运行批处理文件然后关闭打开的命令窗口)时,就好像我失去了从命令窗口到资源管理器窗口的焦点。

也许我试图做的事根本就无法完成......

答案1

考虑到您的更新,为什么不将运行批处理文件的密钥直接发送到命令提示符?

if WinActive("ahk_class CabinetWClass") or WinActive("ahk_class ExploreWClass")
{
  Send {Shift Down}{AppsKey}{Shift Up}
  Sleep 10
  Send w
  Sleep 10
  WinWaitActive, ahk_exe cmd.exe
  Sleep 10
  Send fp.bat{Enter}
  ...

答案2

也许可以将您的解决方案与免费的开源 CMDOW 集成。我在命令行自动化中经常使用它:

https://ritchielawrence.github.io/cmdow/

您可以使用/CLS 和/END 关闭窗口,例如这些批处理文件内容:

(fp.bat)

TITLE Automation ID 123456
...

(另一个关闭 fp.bat 的批处理文件)

CMDOW.EXE "*Automation ID 123456*" /END

我认为 fp.bat 没有正常结束,因此强制终止。

相关内容