1

В пакете я хочу завершить все экземпляры процесса. Я попробую использовать:

@echo off
setlocal EnableDelayedExpansion
for /f "usebackq skip=1" %%r in (`wmic process where Name^="CALC.exe"  get Processid ^| findstr /r /v "^$"`) do SET procid=%%~r
IF [!procid!] NEQ [] (
  wmic process where Name="CALC.exe" call terminate >> NUL
) ELSE (
  GOTO :break
)
:break
SET procid=
endlocal

Но если нет экземпляра calc.exe, я не хочу отображать «Нет доступных экземпляров». Также я предпочитаю, чтобы дисплей не прокручивался вниз на одну строку для каждого экземпляра calc.exe.

Как это сделать ??

1 ответ1

0

Я не хочу отображать «Нет доступных экземпляров».

for /f "usebackq skip=1" %%r in (`wmic process where Name^="CALC.exe" get Processid ^| findstr /r /v "^$"`) do SET procid=%%~r

Вы можете выбросить ошибки, используя оператор перенаправления 2> nul

Перенаправить на NUL (скрыть ошибки)

command 2> nul

Заметки:

  • Символ > должен быть экранирован с помощью ^ .
  • null устройство - это специальный файл, который отбрасывает все записанные в него данные, но сообщает, что операция записи выполнена успешно.

Командой for становится:

`wmic process where Name^="CALC.exe" get Processid 2^> nul ^| findstr /r /v "^$"`

Также я предпочитаю, чтобы дисплей не прокручивался вниз на одну строку для каждого экземпляра calc.exe.

 wmic process where Name="CALC.exe" call terminate >> NUL

Вы можете удалить лишние пустые строки, используя оператор перенаправления > NUL 2>&1

Команда "завершить" становится:

wmic process where Name="CALC.exe" call terminate >NUL 2>&1

Собираем все вместе

Модифицированный пакетный файл:

@echo off
setlocal EnableDelayedExpansion
for /f "usebackq skip=1" %%r in (`wmic process where Name^="CALC.exe" get Processid 2^> nul ^| findstr /r /v "^$"`) do SET procid=%%~r
IF [!procid!] NEQ [] (
  wmic process where Name="CALC.exe" call terminate >NUL 2>&1
) ELSE (
  GOTO :break
)
:break
SET procid=
endlocal

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .