2010-06-10 5 views
0

J'essaye d'employer la variable dans la variable en même temps que l'expansion retardée mais toujours pas de chance.variable dans variable dans l'expansion par lots et retardée

SETLOCAL EnableDelayedExpansion 
SET ERROR_COMMAND=exit /B ^!ERRORLEVEL^! 

Ceci est mon dernier essai. Je veux configurer un ERROR_COMMAND à appeler lorsque l'une des étapes du fichier batch se bloque. La commande est censé être:

IF ERRORLEVEL 1 !ERROR_COMMAND! 

ou

IF ERRORLEVEL 1 %ERROR_COMMAND% 

La chose est, je ne suis pas en mesure de savoir, comment configurer correctement la variable ERROR_COMMAND, de sorte que ERRORLEVEL ne soit pas évalué à le temps d'affectation, mais au moment de l'évaluation de la variable

Bien sûr, je peux copier & coller le code dans le fichier de commandes, mais en utilisant la variable semble juste un peu plus jolie ...

Quelqu'un?

Merci, Milan

+0

exit/B ne fait pas ce que vous pensez foo.cmd && onlyDoThisOnSuccess.cmd ne fonctionnera pas – Anders

Répondre

1

Je suis sûr qu'il ya plusieurs façons de le faire, voici deux:

A)

SET ERROR_COMMAND=call echo.errlvl=%%ERRORLEVEL%% 

verify failthis 2>nul 
%ERROR_COMMAND% 

B)

setlocal DISABLEDELAYEDEXPANSION&set "X=!" 
call (endlocal&set "ERROR_COMMAND=echo.errlvl=%X%ERRORLEVEL%X%")&setlocal ENABLEDELAYEDEXPANSION 

verify failthis 2>nul 
%ERROR_COMMAND% 

Il convient également de noter que si quelqu'un définit ERRORLEVEL = foo (Dans votre script ou "globalement"),% ERRORLEVEL% ne résoudra pas correctement (Idem pour% CD% et tous les autres construits en variables spéciales)

+0

tricky one :) - pour l'instant j'ai utilisé goto au lieu d'expirer ERRORLEVEL dans une autre variable va tester le vôtre demain et vous faire savoir – rezna

+0

Pourriez-vous s'il vous plaît expliquer votre code dans A? –

+0

@PiotrDobrogost: Qu'y a-t-il à expliquer? Il affiche "errlvl = 1" car la commande verify échoue (dans le but d'afficher un niveau d'erreur> 0) et %% l'empêche d'étendre% ERRORLEVEL% dans la commande set ... – Anders

Questions connexes