Je sais que cette question aurait déjà été discutée des milliers de fois, mais je ne sais pas ce que je fais mal!imbriqué pour boucle avec if déclaration dans le fichier batch
J'ai le script de fichier bat suivant qui essaie d'effectuer un vidage mémoire basé sur PID
de tous les processus en cours correspondant à la variable %PROCNAME%
. Il semble effectuer ce dont j'ai besoin jusqu'à ce que je fasse écho au %DUMFILENAME%
. Ici, il imprime le PID
de la variable PID
de l'itération précédente ...
E.g. Si j'ai 3 instances de bloc-notes (avec les PID 1, 2, 3) en cours d'exécution et que je cours la chauve-souris suivante. Je reçois suivant la sortie sur l'invite de commande:
"Current PID is 1"
C:\Documents and Settings\userme\Local Settings\Application Data\notepad\notepad.exe_Thu 03222012204843.02.dmp
"Current PID is 2"
C:\Documents and Settings\userme\Local Settings\Application Data\notepad\notepad.exe_1_Thu 03222012204843.02.dmp
"Current PID is 3"
C:\Documents and Settings\userme\Local Settings\Application Data\notepad\notepad.exe_2_Thu 03222012204843.02.dmp
Mon script de chauve-souris:
@echo off
SETLOCAL EnableDelayedExpansion
SET PROCNAME=notepad.exe
FOR /F "tokens=1 delims=," %%A in ('tasklist /FI "IMAGENAME eq %PROCNAME%" /FO LIST') DO (
set "maintoken=%%A"
Call:InnerToken !maintoken!)
pause
goto :end
:InnerToken
set innertoken=%1
IF "%innertoken%"=="PID:" (
FOR /F "tokens=1,2 delims=:" %%B in ("%innertoken%") DO (
set "res=%~n2"
echo "Current PID is !res!"
SET "DUMPFILENAME=%USERPROFILE%\Local Settings\Application Data\Notepad\%PROCNAME%_!res!_%date:/=%%time::=%.dmp"
echo %DUMPFILENAME%
)
)
:end
Toute aide serait grandement appréciée ...
Cela signifie-t-il que lorsque j'utilise une variable étendue retardée comme '! Res!' Pour créer une autre variable locale telle que 'DUMPFILENAME', je suis supposé traiter' DUMPFILENAME' aussi comme variable d'expansion différée? Je ne savais vraiment pas ça. –
'cmd' n'est pas une feuille de calcul et ne suivra pas l'endroit où vos variables ont leurs valeurs. L'expansion différée est nécessaire car les variables sont développées quand * parsing * une instruction (qui, si elle est ou inclut un bloc, compte comme une seule instruction). – Joey