Если Notepad.exe запущен, то taskkill, если он не запущен, переходит к следующему оператору.

Мне нужна помощь в написании батч-кода.

В начальном состоянии моего пакетного сценария мне нужно проверить, работает ли notepad.exe, если он работает, то
taskkill /im notepad.exe elsif notepad.exe не работает, а затем перейти к следующему пакетному оператору/коду.


person Mowgli    schedule 09.04.2013    source источник


Ответы (2)


Вы можете просто выполнить taskkill /im notepad.exe во всех случаях. Если он не запущен, то taskill будет нечего убивать и он просто вернется.

В этой ситуации taskkill сообщит об ошибке и установит уровень ошибки. Вы можете подавить сообщение об ошибке, перенаправив стандартную ошибку:

taskkill /im notepad.exe 2> nul

Что касается уровня ошибки, вы можете просто проигнорировать его, и он будет очищен следующей командой, которую вы выполните. Или, если необходимо, вы можете очистить его самостоятельно.

Этот подход, на мой взгляд, лучше, чем попытки предугадать, удастся ли taskkill. Вы не сможете предвидеть все возможные режимы отказа, и, поскольку taskkill сам выполняет ту самую проверку, о которой вы спрашиваете, я думаю, вы можете оставить эту проверку taskkill.

person David Heffernan    schedule 09.04.2013
comment
Возможно, автор вопроса искал taskkill /im notepad.exe || выход /b - person joojaa; 09.04.2013
comment
ошибку не выдаст? если это так, он может не выполнять следующие операторы? - person Mowgli; 09.04.2013
comment
Он сообщает об ошибке. И я показываю, как это подавить. Но он продолжит выполнение следующего оператора. Помните, что мы говорим о пакетной обработке, а не о реальном языке программирования! ;-) - person David Heffernan; 09.04.2013
comment
@joojaa Судя по комментариям, это не так - person David Heffernan; 09.04.2013
comment
Спасибо, лол, ты меня смутил, когда сказал настоящий язык программирования. - person Mowgli; 09.04.2013
comment
В Windows 10 добавление 2> nul к команде taskkill создает нулевой файл, который я не могу удалить, только rm nul. Любой способ обойти это? Спасибо. - person DotBot; 11.03.2019

Попробуйте taskkill /fi "IMAGENAME eq notepad.exe" Не найдя notepad.exe, вы получите только информацию вместо ошибки.

person tomdemuyt    schedule 09.04.2013
comment
+1 Довольно мило. Избегает необходимости сбрасывать уровень ошибки. Однако ваше последнее утверждение вводит в заблуждение. Ошибки не останавливают выполнение. Выполнение просто включается перед лицом ошибок. - person David Heffernan; 09.04.2013