Проблема с командой / f в Windows XP - PullRequest
3 голосов
/ 11 декабря 2008

Я использую Windows XP с пакетом обновления 3 (SP3) и по умолчанию включаю расширения команд в реестре 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"
)
)

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

Ответы [ 4 ]

7 голосов
/ 11 декабря 2008

Это потому, что 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-последовательностями, необходимыми для того, чтобы это работало.

1 голос
/ 11 декабря 2008

На моем компьютере с 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 не выполнялся;))

0 голосов
/ 15 февраля 2010
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
)
0 голосов
/ 11 декабря 2008

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

ИНФОРМАЦИЯ: Нет задач, запущенных с указанные критерии

Сообщение:

@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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...