Anidado para - lote

Anidado para - lote

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 /Rfuncione 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

información relacionada