Нужна помощь в написании командного файла, который выполняет другой 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
Другие вопросы по тегам