制作一个批处理文件以启动/停止一个程序?

3
我需要一个批处理(.bat)文件,如果程序没有打开就启动它,如果已经打开就停止它。我玩的游戏在关闭启动器后会一直在后台运行。我必须使用任务管理器结束它,否则无法启动它,因为Steam不允许同一应用程序打开两次。所以我希望有一个批处理文件来实现这个功能,并将其绑定到一个宏中。
3个回答

8

要检查您的程序是否正在运行:(这里以notepad.exe为例)

@echo off
Set "MyProcess=Notepad.exe"

tasklist | find /i "%MyProcess%">nul  && echo %MyProcess% Is running || echo %MyProcess% Is not running

这样您就可以这样做:
@echo off
Set "MyProcess=Notepad.exe"

tasklist | find /i "%MyProcess%">nul  && Taskkill /F/IM  "%MyProcess%" || start "%MyProcess%"

好的,这基本上就是我已经有的东西,它无论如何都会运行程序,但从不结束它。这是我的旧代码:@echo off tasklist /fi "imagename eq Launcher.exe" |find ":" > nul if errorlevel 1 taskkill /f /im "Launcher.exe" if errorlevel 0 start steam://rungameid/243870 exit - MPenate
您只是在此代码中终止了 Laucher.exetaskkill /F/IM "steam.exe" 的结果会如何? - SachaDee
不好意思,我目前的代码打开了Launcher.exe,当我再次运行它时(在启动器仍然打开的情况下),它会关闭启动器并重新打开它。 - MPenate
Launcher.exe是一个进程,它的名称是Launcher。为了通过Steam正确打开它,我必须使用start steam://rungameid/24387。 - MPenate
@echo off tasklist /fi "imagename eq Launcher.exe" |find ":" > nul if errorlevel 0 taskkill /f /im "Launcher.exe" && exit start steam://rungameid/243870 - MPenate
显示剩余3条评论

1
这是另一种做法:

@echo off
tasklist /fi "imagename eq Launcher.exe" |find "." > nul && taskkill /f /im "Launcher.exe" & goto :EOF
tasklist /fi "imagename eq Launcher.exe" |find "." > nul || start "" steam://rungameid/243870 & goto :EOF

-1

所以我弄明白了:

@echo off
tasklist /fi "imagename eq Launcher.exe" |find ":" > nul
if errorlevel 0 taskkill /f /im "Launcher.exe" && exit
start steam://rungameid/243870
exit

背后的逻辑是,如果你能终止进程,那么在创建新的进程会话之前结束提示。但如果进程无法终止,则创建一个新的进程会话,然后结束提示。


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