Aninhado para - lote

Aninhado para - lote

Estou com um pequeno problema com esse código:

for %%A in (tmp1,tmp2,tmp3) do (
    for /R C:\%%A %%B in (*.txt) do copy %0 "%%~B" /Y
)

Não recebo nenhuma mensagem de erro ou algo parecido, o código simplesmente é executado, mas não funciona. Alguém pode me dar uma luz? Obrigado!

Responder1

Existem muitas fases no analisador de lote. VerComo o Windows Command Interpreter (CMD.EXE) analisa scripts?para mais informações.

As opções da instrução FOR são analisadas antes da expansão da variável FOR, portanto você não pode usar variáveis ​​FOR (ou expansão atrasada) nas opções FOR.

Vejo duas soluções alternativas:

1) PUSHD para a pasta raiz para que /Rfuncione corretamente com o diretório atual.
Eu gosto mais desta opção.

for %%A in (tmp1,tmp2,tmp3) do (
  pushd c:\%%A
  for /R %%B in (*.txt) do copy %0 "%%~B" /Y
  popd
)

2) Transfira o valor para um 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

informação relacionada