Команда FOR с параметром /F
и команда или командная строка, заданные как set (строка в скобках), дополнительно заключенная в '
, может использоваться для обработки выходных данных. команды или командной строки с несколькими командами в одной строке.
Вы можете использовать этот пакетный файл:
@ECHO OFF
SET "_process=cmd.exe"
FOR /F %%I IN ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq %_process%" ^| %SystemRoot%\System32\find.exe /I /C "%_process%"') DO SET "_count=%%I"
IF /I "%_process%" == "cmd.exe" SET /A _count-=1
IF %_count% LSS 2 (
ECHO action 1
) ELSE (
ECHO action 2
)
Команда FOR выполняется в фоновом режиме без видимого консольного окна cmd.exe /C
с командной строкой:
C:\Windows\System32\tasklist.exe /FI "IMAGENAME eq cmd.exe" | C:\Windows\System32\find.exe /I /C "cmd.exe"
TASKLIST опция /FI "IMAGENAME eq cmd.exe"
фильтрует вывод TASKLIST уже для процессов с именем образа (= имя исполняемого файла) cmd.exe
. Это ускоряет дальнейшую обработку и позволяет избежать запуска процесса с именем файла totalcmd.exe
как cmd.exe
, как в рассматриваемой командной строке.
Вывод TASKLIST , записанный для обработки STDOUT , перенаправляется для обработки STDIN команды FIND , которая обрабатывает строки и считает строки, содержащие cmd.exe
в любом месте строки. FIND наконец выводит количество строк, содержащих искомую строку для обработки STDOUT командного процесса, выполняющегося в фоновом режиме.
Оператор перенаправления |
должен быть экранирован с помощью символа вставки ^
on FOR , чтобы интерпретировать его как буквальный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR , которая выполняет встроенную командную строку в отдельном командном процессе, запущенном в фоновом режиме.
FOR с опцией /F
захватывает все, что записано для обработки STDOUT выполненной команды, и обрабатывает каждую строку. В этом случае FOR содержит только одну строку, содержащую только число. Поэтому не требуется никаких дополнительных опций для назначения номера, назначенного переменной цикла I
с помощью FOR переменной среды _count
с помощью команды SET .
Целью этого пакетного файла является подсчет числа cmd.exe
процессов, уже запущенных. Поскольку командная строка с TASKLIST и FIND выполняется FOR в фоновом режиме с использованием еще одного процесса cmd.exe
, необходимо вычесть счет на один чтобы получить правильный результат, используя арифметическое выражение, оцененное с SET /A _count-=1
. Это уменьшение на единицу необходимо только для правильного подсчета количества cmd.exe
процессов. Это не нужно для любого другого процесса.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
find /?
for /?
if /?
set /?
tasklist /?