2010-10-21 5 views
6

en essayant de créer un script .bat, et avoir besoin de faire fonctionner certaines chaînes correctement.Cmd: ne pas évaluer les variables à l'intérieur d'une boucle

C'est ce que j'ai jusqu'à présent

@echo off 
for /r %%i in (*.csv) do (
set str=%%i 
set str=%str:csv=rar% 
echo %%i 
echo.%str% 
) 

Dire que j'ai cette course dans C: \, et a obtenu 5 csv, 1.csv, 2.csv ... 5.csv

première fois que je lance, je reçois de sortie:

C:\1.csv 

C:\2.csv 

C:\3.csv 

C:\4.csv 

C:\5.csv 

La deuxième fois que je reçois:

C:\1.csv 
csv=rar 
C:\2.csv 
csv=rar 
C:\3.csv 
csv=rar 
C:\4.csv 
csv=rar 
C:\5.csv 

Ensuite, tous les appels je reçois:

C:\1.csv 
rar=rar 
C:\2.csv 
rar=rar 
C:\3.csv 
rar=rar 
C:\4.csv 
rar=rar 
C:\5.csv 

Quand ce que j'attendrai à obtenir est tout droit:

C:\1.csv 
C:\1.rar 
C:\2.csv 
C:\2.rar 
C:\3.csv 
C:\3.rar 
C:\4.csv 
C:\4.rar 
C:\5.csv 
C:\5.rar 

Je supprimer la substitution:

@echo off 
for /r %%i in (*.csv) do (
echo %%i 
set str=%%i 
echo.%str% 
) 

première manche :

C:\1.csv 

C:\2.csv 

C:\3.csv 

C:\4.csv 

C:\5.csv 

Deuxième course:

C:\1.csv 
C:\5.csv 
C:\2.csv 
C:\5.csv 
C:\3.csv 
C:\5.csv 
C:\4.csv 
C:\5.csv 
C:\5.csv 
C:\5.csv 

Il est comme il est pas défini la variable str jusqu'à la dernière course de la boucle, même si elle essaie de faire écho à la variable, la ligne qui se produit après le réglage, puis enregistré cette pour la prochaine boucle? Y a-t-il quelque chose qui me manque sur la façon dont elle transforme les boucles?

Merci

Répondre

9

Vous devez utiliser setlocal enabledelayedexpansion. En fait, le contenu de %str:csv=rar% est évalué une seule fois avant l'exécution de la boucle. Donc:

@echo off 
setlocal enabledelayedexpansion 
for /r %%I in (*.csv) do (
set str=%%i 
set str=!str:csv=rar! 
echo %%i 
echo.!str! 
) 
endlocal 
+0

Vous monsieur, êtes un gentleman! (Acceptera dans 5 minutes quand je peux) – Psytronic

+0

C'est un problème commun avec les fichiers batch ... J'ai été trompé par cela il y a quelques mois ... – Benoit

Questions connexes