Проблема с командой for / f в Windows XP

Я использую Windows XP с пакетом обновления 3, и в реестре Windows по умолчанию включены командные расширения. Почему-то следующая команда не работает в этой версии Windows, но если я запускаю ее в Windows Server 2003 или Windows Vista Business, она работает нормально. Есть подсказка?

Проблема в том, что в Windows XP кажется, что параметр / f вообще не работает, а часть команды do никогда не выполняется.

Это команда:

for /f "tokens=1 delims=: " %A in ('tasklist /FI "IMAGENAME eq python.exe" /NH') do (
If "%A" == "python.exe" (
    echo "It's running"
) Else (
    echo "It's not running"
)
)

Заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
3 330
4

Ответы 4

На моем компьютере с Windows XP работает следующее:

@echo off
for /f "tokens=1 delims=: " %%A in ('tasklist /FI "IMAGENAME eq java.exe" /NH') do (
    If "%%A" == "java.exe" (
        echo "It's running"
    ) Else (
        echo "It's not running"
    )
)

Обратите внимание на использование %%A
(Извините, я использовал java.exe, потому что во время моего теста python.exe не работал;))

Это потому, что tasklist.exe выводит на STDERR, когда задача не найдена. Цикл for /f может видеть только STDOUT, поэтому, если python.exe не запущен, ему нечего зацикливать.

Перенаправление STDERR в STDOUT (2>&1) работает:

for /F "tokens=1 delims=: " %A in ('tasklist /FI "IMAGENAME eq python.exe" /NH 2^>^&1') do (
  if "%A"= = "python.exe" (
    echo "It's running"
  ) else (
    echo "It's not running"
  )
)

Символы ^ - это escape-последовательности, необходимые для работы.

Я просто сохранил его исходный формат. Но да, это то, что вам нужно сделать.

Tomalak 11.12.2008 16:26

Кроме того, здесь учитывается регистр, поэтому он будет работать с python.exe, но не с Python.exe. Сделайте оператор if «if / i %% A equ python.exe», чтобы сделать его нечувствительным к регистру.

Patrick Cuff 11.12.2008 16:31

Это будет работать и не будет отображать

INFO: No tasks running with the specified criteria

сообщение:

@echo off
set found=0

for /f "tokens=1 delims=: " %%A in ('tasklist /NH') do (
    If /i "%%A" equ "python.exe" (
        set found=1
    ) 
)

if %found%==1 (
    @echo It's running
) else (
    @echo It's not running
)

Ответ выше, который перенаправляет STDERR, лучше.

Patrick Cuff 11.12.2008 16:24
Set RUNNING=False
for /f "tokens=1 delims=: " %%a in ('tasklist /FI "IMAGENAME eq python.exe" /NH 2^>NUL') do (Set RUNNING=True)
If %RUNNING% == True (
    @Echo It IS running
) ELSE (
    @Echo It's NOT running
)

Другие вопросы по теме