我使用的是 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"
)
)
提前致谢。
最佳答案
那是因为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"
)
)
^
字符是此工作所需的转义序列。
关于windows - Windows XP 上 for/f 命令的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/359232/