3

我使用的是 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

4 回答 4

7

那是因为没有找到任务时tasklist.exe输出。循环只能看到,所以如果STDERR没有运行,它就没有什么可以循环的了。for /fSTDOUTpython.exe

重定向STDERRSTDOUT( 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"
  )
)

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

于 2008-12-11T13:14:29.007 回答
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 ;))

于 2008-12-11T13:05:10.257 回答
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
)
于 2010-02-15T17:17:06.517 回答
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
)
于 2008-12-11T13:21:24.843 回答