我曾尝试搜索如何执行此操作的示例,但没有成功,包括使用 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 没有正常结束,因此强制终止。