Нужна помощь в написании командного файла, который выполняет другой bat-файл, если он существует и не запущен
Предположим, у меня есть файл bat с именем parent.bat, который выглядит как
@ECHO off
rem this is parent.bat file
:label
if exist child1.bat (
tasklist /v /fi "IMAGENAME eq cmd.exe"|find /I /c "hello1"
if %ERRORLEVEL% == "0" start child1.exe
)
if exist child2.bat (
tasklist /v /fi "IMAGENAME eq cmd.exe"|find /I /c "hello2"
if %ERRORLEVEL% == "0" start child2.exe
)
if exist child3.bat (
tasklist /v /fi "IMAGENAME eq cmd.exe"|find /I /c "hello3"
if %ERRORLEVEL% == "0" start child3.exe
)
timeout /t 120
goto label
У меня есть child1.bat как
@ECHO off
title hello1
start www.google.com
timeout /t -1
У меня child2.bat как
@ECHO off
title hello2
start www.yahoo.com
timeout /t -1
У меня есть child3.bat как
@ECHO off
title hello3
start www.facebook.com
timeout /t -1
Я намерен запустить facebook,google,yahoo, если файлы child.bat существуют, но они не запущены
но что происходит, даже если файлы child.bat запущены (они находятся в режиме паузы), файл parent.bat открывает все файлы child.bat
Еще более иногда, когда я изменяю qoutes в%ERRORLEVEL% == "0", он не запускает child1.bat и child2.bat
иногда запускается противоположное, а иногда child2.bat и child3.bat
1 ответ
Решение
:label
for %%f in (1 2 3) do if exist "child%%f.bat" (
tasklist /v /fi "IMAGENAME eq cmd.exe"|findstr /I "hello%%f" >nul
if errorlevel 1 start "child%%f.bat"
)
timeout /t 120
goto :label