![Anidado para - lote](https://rvso.com/image/1444057/Anidado%20para%20-%20lote.png)
Tengo un pequeño problema con este código:
for %%A in (tmp1,tmp2,tmp3) do (
for /R C:\%%A %%B in (*.txt) do copy %0 "%%~B" /Y
)
No recibo ningún mensaje de error ni nada por el estilo, el código simplemente se ejecuta pero no funciona. ¿Alguien puede darme una luz? ¡Gracias!
Respuesta1
El analizador por lotes consta de muchas fases. Ver¿Cómo analiza los scripts el intérprete de comandos de Windows (CMD.EXE)?para más información.
Las opciones de la declaración FOR se analizan antes de la expansión de la variable FOR, por lo que no puede usar variables FOR (o expansión retrasada) dentro de las opciones FOR.
Veo dos soluciones:
1) PUSHD a la carpeta raíz para que /R
funcione correctamente con el directorio actual.
Me gusta más esta opción.
for %%A in (tmp1,tmp2,tmp3) do (
pushd c:\%%A
for /R %%B in (*.txt) do copy %0 "%%~B" /Y
popd
)
2) Transferir el valor a un argumento CALL
for %%A in (tmp1,tmp2,tmp3) do call :copyLoop c:\%%A
exit /b
:copyLoop
for /r %1 %%B in (*.txt) do copy %0 "%%~B" /Y
exit /b