2010-10-21 23 views
6

intentando hacer un script .bat, y es necesario que algunas cadenas funcionen correctamente.Cmd: no se evalúan las variables dentro de un bucle

Esto es lo que tengo hasta ahora

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

Di Tengo esta ejecución en C: \, y tengo 5 csv, 1.csv, 2.csv ... 5.csv

primera vez que corro, me sale la producción de:

C:\1.csv 

C:\2.csv 

C:\3.csv 

C:\4.csv 

C:\5.csv 

La segunda vez que me sale:

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

A continuación, todas las llamadas posteriores me sale:

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

Cuando lo que estaría esperando a conseguir es directamente a través de:

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 

Así elimino la sustitución:

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

Primera corrida :

C:\1.csv 

C:\2.csv 

C:\3.csv 

C:\4.csv 

C:\5.csv 

segunda pasada:

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 

Es como si no se establece la variable str hasta la última ejecución del bucle, a pesar de que está tratando de hacer eco a cabo la variable, la línea de los cuales se produce después de que el ajuste y, a continuación, se guarda esta para el siguiente ciclo? ¿Hay algo que me falta en la forma en que procesa los bucles?

Gracias

Respuesta

9

Debe utilizar setlocal enabledelayedexpansion. En realidad, el contenido de %str:csv=rar% se evalúa solo una vez antes de que se ejecute el bucle. Entonces:

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

¡Usted señor, es un caballero! (Lo aceptaré en 5 minutos cuando pueda) – Psytronic

+0

Ese es un problema común con los archivos por lotes ... Me engañaron hace algunos meses ... – Benoit

Cuestiones relacionadas