2008-12-11 4 views
3

J'utilise Windows XP Service Pack 3 et les extensions de commande sont activées par défaut dans le registre Windows. D'une certaine manière, la commande suivante ne fonctionne pas sur cette version de Windows, mais si je l'exécute dans Windows Server 2003 ou Windows Vista Business, cela fonctionne très bien. Une idée? 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.Problème avec la commande for/f sous Windows XP

Voici 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 à l'avance.

Répondre

1

Ce qui suit ne fonctionne 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é, je java.exe parce que personne ne python.exe était en cours d'exécution au moment de mon test;)

7

C'est parce que tasklist.exe sort à STDERR lorsqu'aucune tâche n'est trouvée. La boucle for /f ne peut voir que STDOUT, donc dans le cas où python.exe ne fonctionne pas, il n'a rien à boucler.

Réorientation 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.

+1

devez modifier le% A à %% A si cela va être dans un fichier batch ... –

+1

J'ai simplement gardé son ou format original. Mais, oui, c'est ce que tu devrais faire. – Tomalak

+2

En outre, ceci est sensible à la casse, donc cela fonctionnera pour "python.exe" mais pas "Python.exe". Faites l'instruction if "if/i %% A equ python.exe" pour le rendre insensible à la casse. –

0

Cela fonctionne et ne pas afficher la

INFO: Pas de tâches 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 
) 
+0

La réponse ci-dessus qui redirige STDERR est meilleure. –

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 
) 
Questions connexes