如何使用批处理文件运行多个程序

26

我想使用批处理文件运行两个程序,但条件是第二个程序只能在第一个程序加载后启动,那么有没有办法使用计时器控制程序何时启动。


1
你不能在批处理文件中这样做,因为批处理文件会阻塞直到当前命令完成。我建议你编写一个包装应用程序来启动两个程序。 - Rasika
1
@Joey: 没错,但有点简短 :-) 你可以使用 start 或者管道,或者如果程序是一个Windows可执行文件,它就能正常工作。 - jeb
5个回答

25

我也需要同样的东西,后来发现以下方法能够如愿运行:

start D:\Michal\Xming\Xming.exe -multiwindow
start D:\Michal\Xming\putty.exe
start D:\Michal\WinSCP\WinSCP.exe

所有的内容都保存在Login.bat文件中。

顺便提一下,我正在运行Win7,但我怀疑这没有任何影响。


适用于 Windows 10 和 Visual Studio。 - ibr

22

基本上,你可以尝试这种方法(未经测试):

  1. 使用start命令运行第一个程序。

  2. 循环检查任务列表,以查看该程序是否出现。

  3. 对该循环施加一定的时间限制。

  4. 如果成功,则运行下一个程序;否则,带有通知退出。

脚本可能是这样的:

@ECHO OFF
START program1.exe
FOR /L %%i IN (1,1,100) DO (
  (TASKLIST | FIND /I "program.exe") && GOTO :startnext

  :: you might add here some delaying
)
ECHO Timeout waiting for program1.exe to start
GOTO :EOF

:startnext
program2.exe
:: or START program2.exe

请注意,时间并不精确,特别是如果您要在任务列表检查之间插入延迟。


12
我想这可能与此处无关,但我想分享以下内容:
我创建了以下批处理文件,并在办公室打开笔记本电脑时运行它,以便一键打开相关程序。 将此文件放在桌面上,并创建一个文件夹,在其中放置所有相关程序的快捷方式。 因此,我按以下方式在批处理文件中运行这些快捷方式:
@ECHO off

start C:\Users\User1\Desktop\Softwares\IE
start C:\Users\User1\Desktop\Softwares\Googletalk
start C:\Users\User1\Desktop\Softwares\YahooMessenger
start C:\Users\User1\Desktop\Softwares\Program4
start C:\Users\User1\Desktop\Softwares\Program5

6
我还发现了一个小技巧,只需使用以下带有-n开关的ping命令即可:
start /d "C:\Program Files (x86)\Mobile Partner\" MobilePartner.exe
ping 127.0.0.1 -n 8
start /d "F:\Other Applcations\System Tools\OS Tweak\" dragfullwindows.exe

1
我是一名有用的助手,可以进行文本翻译。以下是需要翻译的内容:

我写这篇答案是因为我使用的是 Windows 10 操作系统,并且现在是2021年。 此外,这提供了一些新时代程序的更多想法,应该在任务栏中运行(在后台)。

这是我桌面上的 "Work Start.bat" 批处理文件:

rem   Work Start Batch Job from Desktop
rem   Launchs All Work Apps
@echo off
rem start "Start VS Code" "C:\Users\yourname\AppData\Local\Programs\Microsoft VS Code\code.exe"
start "Start OneDrive" "C:\Users\yourname\AppData\Local\Microsoft\OneDrive\OneDrive.exe"
start  "Start Google Sync" "C:\Program Files\Google\Drive\GoogleDriveSync.exe"
start "Start Clipboard" "C:\Program Files\Beyond Compare 4\BCClipboard.exe"
start "Start Cisco AnyConnect" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
start chrome
start firefox
start skype
start "Start Teams" "C:\Users\yourname\AppData\Local\Microsoft\Teams\current\Teams.exe" /MIN
start Slack
start Zoom
sleep 10
taskkill /IM "explorer.exe"
taskkill /IM "teams.exe"
taskkill /IM "skype.exe"
taskkill /IM "slack.exe"
taskkill /IM "zoom.exe"
taskkill /IM "cmd.exe"
@echo on

一些应用程序无法通过简单的“启动应用程序”命令启动,因此我使用了完整路径。由于某种原因,有些应用程序存储在我的用户应用程序数据文件夹中而不是程序文件中,我不理解这种程序存储行为,它毫无意义。
我使用了时间延迟,以便应用程序可以完全启动,然后使用taskkill命令将其发送到后台。我关闭了explorer.exe,因为OneDrive会打开explorer。我关闭了cmd.exe,因为它由于应用程序行为不当而打开并保持打开状态。其余的我关闭,以便它们只移动到后台。
以下是我的“Work End.bat”批处理文件,用于强制关闭所有内容:
rem   Work End Batch Job from Desktop
rem   Forcibly Closes All Work Apps
@echo off
taskkill /f /IM OneDrive.exe
taskkill /f /IM GoogleDriveSync.exe
taskkill /f /IM BCClipboard.exe
taskkill /f /IM "vpnui.exe"
taskkill /f /IM "chrome.exe"
taskkill /f /IM "firefox.exe"
taskkill /IM "explorer.exe"
taskkill /f /IM "teams.exe"
taskkill /f /IM "skype.exe"
taskkill /f /IM "slack.exe"
taskkill /f /IM "zoom.exe"
@echo on

我必须确保已保存所有工作并且文件不再同步。可能需要一个批处理文件,除了文件同步以外,杀死所有进程。强制关闭Chrome和Firefox的好处是它们在下次启动时会要求恢复,因此我可以继续之前的工作,假设我已经保存了所有内容。如果我不强制关闭这些应用,它们会一直在后台运行,如果我使用交叉关闭按钮关闭它们,它们将不会提供从上次离开的地方开始继续的选项。
我可以使用另一个批处理文件来启动我的游戏文件,但这与第一个文件类似。
现在我可以关闭默认的“启动”应用程序并使用“Work Start.bat”,因为启动应用程序在我只是想玩游戏时很烦人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接