Это потому, что 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"
)
)
Символы ^
являются escape-последовательностями, необходимыми для того, чтобы это работало.