![如何制作一个批处理文件来启动一个进程并等待该进程终止?](https://linux22.com/image/1514738/%E5%A6%82%E4%BD%95%E5%88%B6%E4%BD%9C%E4%B8%80%E4%B8%AA%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E6%9D%A5%E5%90%AF%E5%8A%A8%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E5%B9%B6%E7%AD%89%E5%BE%85%E8%AF%A5%E8%BF%9B%E7%A8%8B%E7%BB%88%E6%AD%A2%EF%BC%9F.png)
我的电脑不是最好的,但它确实满足玩游戏的最低要求侠盗猎车手5。我想让游戏运行得更快,所以我不使用普通的 .exe,而是使用这个批处理文件来启动游戏:
start steam://rungameid/271590
timeout 60
wmic process where name="GTA5.exe" CALL setpriority "high priority"
wmic process where name="gtavlauncher.exe" CALL setpriority "idle"
wmic process where name="subprocess.exe" CALL setpriority "idle"
所以基本上在启动游戏后,它会设置优先级,以便只有 GTA5.exe 运行,而 CPU 会忽略随之而来的其他进程。我希望它运行得更顺畅,将 Windows 主题更改为“经典”有助于实现这一点,所以我下载了一个程序允许我使用 cmd 命令更改主题,我制作了这个脚本-
START c:\ThemeSwitcher classic
start steam://rungameid/271590
timeout 60
wmic process where name="GTA5.exe" CALL setpriority "high priority"
wmic process where name="gtavlauncher.exe" CALL setpriority "idle"
wmic process where name="subprocess.exe" CALL setpriority "idle"
wait process where name="GTA5.exe"
-----------------------------------------------------------
start c:\ThemeSwitcher MY PC
在“----------”中,我想添加一些内容,让文件等待进程终止后再将主题更改为正常,这样我就不必手动执行此操作了。我只知道一些我在谷歌上搜索过的批处理命令,但目前它们没有帮助。抱歉我的英语不好。
答案1
创建这样的批次:
title i'm waiting
start /wait /high cmd /ktitle kill me
echo This is the end
pause
您可以看到start
命令如何与wait
参数一起工作
您可以使用创建批处理pause
,在批处理窗口中执行某些操作后按空格键,然后运行下一个命令
你可能正在寻找类似的东西waiting for terminate existing process
:
echo do somthing at start
:start_test
::wait ~6s -1s = 5s
::you can use TIMEOUT 5
call :sleep 6
wmic process where name="notepad.exe" get name |find "notepad.exe">nul
if %errorlevel%==0 goto :start_test
echo do somthing at the end
::pause
goto :eof
:sleep
ping 127.0.0.1 -n %1 > nul
goto :eof
它的测试过程每5秒存在一次,您可以更改间隔。
答案2
另一种仅启动一个新进程的方法是使用 PowerShell!
您可以使用 cmdlet 按名称查找进程Get-Process
。每个进程对象都有一个WaitForExit
方法,正如预期的那样,该方法会阻塞直到该进程停止。因此,此 PowerShell 命令将挂起GTA5.exe
,直到gtavlauncher.exe
、 和subprocess.exe
退出:
Get-Process 'gta5', 'gtavlauncher', 'subprocess' | % {$_.WaitForExit()}
这将查找具有这些名称的所有进程并等待每个进程退出。直到所有进程都退出后,提示才会再次出现。
您可以使用它来阻止批处理脚本,方法是启动 PowerShell 并输入该命令(我使用别名将其缩短了一点):
powershell -command "gps 'gta5','gtavlauncher','subprocess'|%{$_.WaitForExit()}"
一旦进程退出,PowerShell 将退出并将控制权返回给批处理脚本。