tente isto:
for %%f in (.ext1 .ext2) do xcopy *%%f D:\dest /s /d /y
Eu tenho um script de linha única que copia todos os arquivos ".ext1" da pasta atual para a pasta de destino recursivamente:
xcopy *.ext1 D:\dest /s /d /y
Funciona perfeitamente.
Agora também quero copiar todos os * .ext2. Em vez de copiar e colar (funciona bem):
xcopy *.ext1 D:\dest /s /d /y
xcopy *.ext2 D:\dest /s /d /y
Eu quero usar o comando for
:
for %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y
mas não funciona:
Eu tentei usar uma chave /R
:
for /R %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y
mas isso resultou na cópia dos arquivos de origem do subdiretório na pasta raiz de dest. E nomes com espaços não foram.
Qual é a forma correta do comando for
?
Tanto quanto eu posso dizer que sua única opção é para chamar xcopy várias vezes. Se você quiser ter algum tipo de reutilização de código, vejo duas opções:
Defina os parâmetros como variáveis e use-os:
set dest=d:\dest
set options=/s /d /y
xcopy *.ext1 %dest% %options%
xcopy *.ext2 %dest% %options%
ou crie um subprograma para fazer a cópia:
call :do_copy ext1
call :do_copy ext2
goto :eof
:do_copy
xcopy *.%1 d:\dest /s /d /y
goto :eof
Você não pode incluir curingas em um for
regular porque eles sempre serão expandidos (ou ignorados se não houver correspondência). Se a resposta da Endoro não funcionar para você, você pode ler a lista de curingas de um arquivo ou a saída de um comando. Exemplo:
for /f %%f in ('echo *.ext1 ^& echo *.ext2') do xcopy %%f D:\dest /s /y
Tags batch-file xcopy