@echo off
tasklist /FI "IMAGENAME eq munt.exe" 2>NUL | find /I /N "munt.exe">NUL
if "%ERRORLEVEL%"=="0" goto :EOF
cd "Sound\VST MIDI Synth\MT-32 VST\"
start /min "" munt.exe
ping -n 2 -w 1000 127.0.0.1 >nul
基本上,一旦这个批处理文件启动(通过运行一个程序),我想它杀死munt.exe,如果dosbox.exe终止。我尝试了各种解决方案,但我不认为我的语法正确。任何帮助表示赞赏!如何让这个批处理文件检查x进程是否正在运行,然后在x进程停止运行时kill y进程?
另外,我想让这个进程在后台运行(但不是打开的实际munt.exe进程)。换句话说,我想隐藏出现的CMD窗口。
编辑:基于Deepesh的建议,我现在有以下几点:
goto :Munt
:LoopStart
tasklist /FI "IMAGENAME eq dosbox.exe" 2>NUL | find /I /N "dosbox.exe">NUL
if "%ERRORLEVEL%"=="0"
goto :LoopStart
taskkill /F /IM munt.exe
goto :EOF
:Munt
@echo off
tasklist /FI "IMAGENAME eq munt.exe" 2>NUL | find /I /N "munt.exe">NUL
if "%ERRORLEVEL%"=="0" goto :LoopStart
cd "Sound\VST MIDI Synth\MT-32 VST\"
start /min "" munt.exe
ping -n 2 -w 1000 127.0.0.1 >nul
goto :LoopStart
然而,问题是,启动该批处理文件等待,直到批处理文件的程序已经启动dosbox.exe之前退出。因此,批处理文件从未看到dosbox.exe正在运行并在dosbox.exe有机会运行之前终止。那么,是否有办法退出批处理文件,但是如果这有意义的话继续运行它?
将代码放在while循环中。如果dosbox正在运行,请再次检查。如果没有,则终止进程munt.exe并退出。 –
好吧,通过阅读您所需的内容并查看代码,它看起来不合法。首先,你为什么要ping本地主机?这是延迟吗?如果是这样,而是使用'timeout/t 10'然后让我看看我是否得到这个。你想检查dosbox和mund是否都在运行,如果dosbox已经死了,那么停止mund并重启mund?或停止mund,重新启动dosbox,然后重新启动mund? –