我试图实现一个批处理文件来检查程序是否正在运行,如果没有启动它,如果它启动了多次,则会关闭所有重复实例。 这是我使用stackoverflow中的一些提示实现的代码:
:check
tasklist /fi "imagename eq notepad.exe" /nh |find /i /c "notepad.exe" > "%temp%\variable.txt" #here I count how many instances are running
set /p value=<"%temp%\variable.txt" #and save the value in the variable.txt file
##check and choose action
if %value% equ nul goto none
if %value% geq 2 goto more
if %value% equ 1 goto one
:more
for /f "tokens=2" %%x in ('tasklist ^| findstr notepad.exe') do set PIDTOKILL=%%x
taskkill /F /PID %PIDTOKILL%
goto check
:none
start notepad.exe
goto check
:one
timeout 10 > nul
goto check
但是当我测试它时会发生一些奇怪的行为...... 如果只有一个实例运行正常,但如果我在批处理文件运行时关闭记事本,则例程会显示:更多标签显然没有任何理由......我做错了什么? 谢谢你的帮助
答案 0 :(得分:0)
愚蠢的错误......这是工作代码:
:check
timeout 10 > nul
tasklist /fi "imagename eq notepad.exe" /nh |find /i /c "notepad.exe" > "%temp%\variable.txt"
set /p value=<"%temp%\variable.txt"
if %value% equ 0 goto none
if %value% geq 2 goto more
if %value% equ 1 goto check
:more
for /f "tokens=2" %%x in ('tasklist ^| findstr notepad.exe') do set PIDTOKILL=%%x
taskkill /F /PID %PIDTOKILL%
goto check
:none
start notepad.exe
goto check