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 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:

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

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 ?

    
por Nick 05.05.2013 / 11:19

3 respostas

5

tente isto:

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

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
    
por 05.05.2013 / 11:37
0

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
    
por 05.05.2013 / 13:49