Windows XP上的for / f命令出现问题

时间:2008-12-11 12:51:09

标签: windows syntax batch-file cmd

我正在使用Windows XP Service Pack 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"
)
)

提前致谢。

4 个答案:

答案 0 :(得分:7)

这是因为tasklist.exe在没有找到任务时输出到STDERRfor /f循环只能看到STDOUT,因此如果python.exe未运行,则无法循环播放。

STDERR重定向到STDOUT2>&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"
  )
)

^个字符是此工作所必需的转义序列。

答案 1 :(得分:1)

以下适用于我的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;))

答案 2 :(得分:0)

这将起作用而不显示

  

信息:没有运行任务的任务   指定标准

消息:

@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
)

答案 3 :(得分:0)

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
)