2016-05-26 2 views
0

Мне нужно создать файл командного файла Windows (* .bat), который запускает свои команды только в том случае, если определенные процессы (и пакетные файлы) НЕ работают.Подождите, пока файл .bat закроется в пакетном файле Windows

Я посмотрел на решение, которое работает для процессов (* .exe) здесь: How to wait for a process to terminate to execute another process in batch file

Я хочу сделать что-то очень похожее, однако, есть одна трудность: Пакетные файлы отображаются как «ЦМД. exe "в команде" TASKLIST ".

Я хочу проверить, работает ли определенный файл bat, например: «C: \ mybatch.bat», и если это так, подождите, пока он не будет закрыт.

+0

'tasklist/v' дает название окна. Это похоже на название окна - cmd не беспокоит изменение фактического названия. –

ответ

0

Проверка того, что конкретный файл bat mybatch.bat работает может быть более сложной задачей, чем он мог бы смотреть на первый взгляд.

В поисках конкретного окна заголовка в tasklist /V, а также тестирование CommandLine недвижимости в wmic process where "name='cmd.exe'" get CommandLineмогут не при некоторых обстоятельствах можно вообразить.

1-й. Вы можете

  • добавить title ThisIsDistinguishingString команды в начале всех других title команд в mybatch.batи
  • удалить из mybatch.batи
  • убедитесь, что mybatch.batне вызова другой партии скрипт (ы), содержащего a title команда?

Затем проверьте errorlevel вернулся из find command следующим образом:

:testMybatch 
tasklist /V /FI "imagename eq cmd.exe" | find "ThisIsDistinguishingString" > nul 
if errorlevel 1 (
    rem echo mybatch.bat batch not found 
) else (
    echo mybatch.bat is running %date% %time% 
    timeout /T 10 /NOBREAK >NUL 2>&1 
    goto :testMybatch 
) 

второй.В противном случае, проверьте wmic Windows Management Instrumentation command выход может помочь

wmic process where "name='cmd.exe'" get /value 

Тогда вы могли бы обнаружить mybatch.bat в своей продукции сократился до

wmic process where "name='cmd.exe'" get CommandLine, ProcessID 

Обратите внимание, что wmic может вернуть некоторые Win32_Process class свойства, в частности CommandLine, пустой если конкретный процесс запускался под другой учетной записью пользователя или повышался (запускался как администратор).
Повышенный wmic возвращает все объекты недвижимости в полном объеме.

+0

Спасибо. Ваше решение подходит для моих нужд. – zaidgs

0

То, что вы говорите, происходит по умолчанию.

Чтобы проверить, обрешетка новый BAT-файл (скажем 1.bat) и поставить в нем

известково

MSPaint

Сохранить и запустить его. Калькулятор начнется. Вы заметите, что Paitbrush запускается только тогда, когда вы закрыли калькулятор.

+0

Вы неправильно поняли мой вопрос. Командный файл, который мне нужен, чтобы проверить, запущен ли он, запущен за пределами/перед файлом партии, который мне нужно написать. – zaidgs

Смежные вопросы