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

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

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

11.12.2008 12:51:09
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;))

1
26.08.2009 19:32:07

Это потому, что 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"
  )
)

Эти ^символы являются управляющими последовательностями , необходимыми для этого работу.

7
11.12.2008 13:14:29
Я просто сохранил его оригинальный формат. Но да, это то, что вам нужно сделать.
Tomalak 11.12.2008 13:26:14
Кроме того, это с учетом регистра, поэтому он будет работать для "python.exe", но не для "Python.exe". Сделайте оператор if "if / i %% A equ python.exe", чтобы сделать его без учета регистра.
Patrick Cuff 11.12.2008 13:31:15

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

ИНФОРМАЦИЯ: Нет заданий, выполняемых с указанными критериями

сообщение:

@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
)
0
11.12.2008 13:21:24
Ответ выше, что перенаправляет STDERR лучше.
Patrick Cuff 11.12.2008 13:24:43
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
15.02.2010 17:17:06