Problème avec la commande for / f sous Windows XP

J’utilise Windows XP Service Pack 3 et j’ai des extensions de commandes activées par défaut dans le registre Windows. D’une manière ou d’une autre, la commande suivante ne fonctionne pas sur cette version de Windows, mais si je l’exécute sous Windows Server 2003 ou Windows Vista Business, cela fonctionne parfaitement. Des indices?

Le problème est que sous Windows XP, il semble que l’option / f ne fonctionne pas du tout et que la partie do de la commande ne soit jamais exécutée.

Ceci est la commande:

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

Merci d’avance.

C’est parce que tasklist.exe à STDERR lorsqu’aucune tâche n’est trouvée. La boucle for /f voit uniquement STDOUT , donc si python.exe n’est pas en cours d’exécution, il n’y a rien à mettre en boucle.

La redirection de STDERR dans STDOUT ( 2>&1 ) fonctionne:

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

Les caractères ^ sont des séquences d’échappement nécessaires pour que cela fonctionne.

Les éléments suivants fonctionnent sur mon ordinateur 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" ) ) 

Notez l’utilisation de %%A
(Désolé, j’ai utilisé java.exe car aucun python.exe ne fonctionnait au moment de mon test;))

Cela fonctionnera et pas afficher le

INFO: Aucune tâche en cours d’exécution avec les critères spécifiés

message:

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