Arquivos xcopy do Windows XP com extensões recursivamente

3

Eu tenho um script de linha única que copia todos os arquivos ".ext1" da pasta atual para a pasta de destino de forma recursiva:

xcopy *.ext1 D:\dest /s /d /y

Funciona perfeitamente.

Agora eu quero copiar todos os * .ext2 também. 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 um for comando:

for %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y

mas não funciona:

  1. Não copia subdiretórios da pasta de origem
  2. Não copia arquivos com nomes com espaços como "read me.ext1"

Eu tentei usar um /R chave:

for /R %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y

mas isso resultou em copiar os arquivos de origem do subdiretório na pasta raiz de dest. E nomes com espaços não foram.

Qual é a forma correta do for comando seria?

Nick
fonte
para uso com nomes de arquivos com espaços ...xcopy "%%f%" ...
Stephan

Respostas:

5

tente isso:

for %%f in (.ext1 .ext2) do xcopy *%%f D:\dest /s /d /y
Endoro
fonte
1

Tanto quanto eu posso dizer 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
a_horse_with_no_name
fonte
0

Você não pode incluir curingas de forma regular for porque eles sempre serão expandidos (ou ignorados se não houver correspondência). Se a resposta da Endoro não funcionar, 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
Neil
fonte