如何使批处理文件仅在应用程序关闭后运行

Posted

技术标签:

【中文标题】如何使批处理文件仅在应用程序关闭后运行【英文标题】:How to make batch file run only after application has closed 【发布时间】:2021-08-16 08:43:11 【问题描述】:

这个用例是不必要的定义,但我对脚本产生了兴趣,我正在努力学习。我发现当尝试在让我的生活更轻松但不是超级重要的事情上练习时,我的动力最有效!

我创建了一个执行以下操作的批处理文件:

启动 Steam 游戏 将我的显示器切换到我的电视(我的电视在我的电脑旁边的墙上) 将我的音频源切换到我的耳机

效果很好,但我想改进它,因为当我玩完游戏时,显示器仍然在我的电视上。我正在寻找的是一种仅在(游戏)不再运行以将图像移回我的显示器后才运行批处理文件的方法。

本质上,它会:

    运行批处理文件。 游戏打开 显示器移动到电视(我使用一个名为 MultimonitorTool 的小应用程序通过一个名为 tv.cfg 的设置配置来执行此操作) 音频源更改为耳机(我使用 SoundSwitch 和游戏配置文件来设置源) 玩完游戏退出。 将显示器移回显示器的批处理文件(已将其配置为 pc.cfg)运行,但只是因为 game.exe 不再打开。

我在玩“/wait”,但我无法让它工作。在下面的脚本中,前 2 个命令用于打开 Notepad.exe(为测试而更改),然后 TV.cfg 将图像移动到电视。这是关于等待 Notepad.exe 运行 PC.cfg 以将图像移回我的显示器的部分,这不起作用。

我将应用程序更改为记事本只是为了测试,这就是我正在尝试的:

@echo off

cd C:\Windows\system32
start Notepad.exe

cd C:\Users\Rob\Downloads\MultiMonitorTool
start MultiMonitorTool.exe /LoadConfig "C:\Users\Rob\Downloads\MultiMonitorTool\TV.cfg" 

cd C:\Users\Rob\Downloads\MultiMonitorTool
start MultiMonitorTool.exe /LoadConfig "C:\Users\Rob\Downloads\MultiMonitorTool\PC.cfg" /wait "C:\Windows\system32\Notepad.exe"

exit

有没有一种简单的方法来实现我想要做的事情? (我完全是个菜鸟,没有受过任何这些东西的教育!这纯粹是一种爱好)

【问题讨论】:

您检查过 Windows 任务计划程序吗? 简单明了,不要在批处理文件的最后一个命令中使用START 命令。它将等待最后一次运行的程序完成,然后在您关闭程序后执行任何命令。 a) 切换到电视,b) start /wait notepad.exe,c) 切换回显示器。注意:它确实适用于notepad,并且它可能适用于您的游戏(或不适用 - 取决于游戏的编写方式)。如果没有,检查游戏是否仍在运行(tasklist 在循环中)是要走的路。 感谢 Stephan,尝试了您的建议,并且(至少对于记事本而言)它正在工作。等我下班回家后我会再玩弄它 lol 【参考方案1】:

为了知道应用程序是否正在运行,您可以使用tasklist,可以使用以下命令找到更多信息:

tasklist /?

您编写了一个while 循环来检查您的应用程序是否正在运行(不要忘记放置一个timeout 1,以便让您的循环等待一秒钟,否则您可能会“过度列出”您的PC :-)) .

可以在here找到一个例子。

【讨论】:

我尝试过,但无法理解它,大声笑,你有没有机会重新调整我开始使用的脚本以包含任务列表/当你提到?

以上是关于如何使批处理文件仅在应用程序关闭后运行的主要内容,如果未能解决你的问题,请参考以下文章

运行批处理文件后如何关闭命令行窗口?

如何让批处理命令后运行后自动关闭

求教:运行bat文件后如何让cmd窗口自动关闭?

双击时如何使Windows批处理文件暂停?

批处理文件仅在 RDP 会话处于活动状态时执行

如何做一个快捷方式使打开一个软件后自动关闭一个软件