![Aninhado para - lote](https://rvso.com/image/1444057/Aninhado%20para%20-%20lote.png)
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 /R
funcione 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