我正在使用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"
)
)
提前致谢。
答案 0 :(得分:7)
这是因为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"
)
)
^
个字符是此工作所必需的转义序列。
答案 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
)