批处理文件检查程序是否只运行一次并关闭重复实例,如果没有运行则启动它

时间:2016-05-19 15:44:29

标签: batch-file

我试图实现一个批处理文件来检查程序是否正在运行,如果没有启动它,如果它启动了多次,则会关闭所有重复实例。 这是我使用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

但是当我测试它时会发生一些奇怪的行为...... 如果只有一个实例运行正常,但如果我在批处理文件运行时关闭记事本,则例程会显示:更多标签显然没有任何理由......我做错了什么? 谢谢你的帮助

1 个答案:

答案 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