Arquivo em lote para copiar diretórios recursivamente

Respostas:

176

Examine o xcopy , que copiará recursivamente arquivos e subdiretórios.

Existem exemplos, 2/3 abaixo da página. De uso particular é:

Para copiar todos os arquivos e subdiretórios (incluindo quaisquer subdiretórios vazios) da unidade A para a unidade B, digite:

xcopy a: b: /s /e

lc.
fonte
16
Você provavelmente deseja que o sinalizador / y seja incluído também em "Suprime a solicitação para confirmar que você deseja substituir um arquivo de destino existente".
Matthew Lock
11
'xcopy' não é uma boa ideia, porque eles são notoriamente famosos por Erro de memória insuficiente . Tente usar 'robocopy'
Rahul
6
@Rahul Hmm realmente? Eu nunca vi isso, mas xcopy tem certamente sido em torno desde a idade das trevas. Provavelmente você também poderia fazer Copy-Item -Recurseno PowerShell.
lc.
1
Infelizmente sim, esse comportamento é muito comum :). Se você já viu isso acontecendo de forma recorrente, principalmente se você deseja copiar uma grande quantidade de dados, como shows de dados.
Rahul
10
Isso indica que o xcopy foi descontinuado e que a robocopy deve ser usada.
Mike HR
71

Depois de ler os comentários da resposta aceita, tentei o comando robocopy , que funcionou para mim (usando o prompt de comando padrão do Windows 7 64 bits SP 1):

robocopy source_dir dest_dir /s /e
Antonio Vinicius Menezes Medei
fonte
5
Nunca soube que 'robocopy' é um comando embutido no Windows 7! Obrigado pela resposta, muito úteis e poderosas :)
Anmol Saraf
5
Não /Eimplica /S? copy subdirectories, including Empty ones.
Mbomb007
4
Hmmm /Se /Eparecem implicar coisas opostas de acordo com a /?ajuda da robocópia - "não são vazias" e são "vazias". Eu acho que você deveria escolher um.
Stuart Brock
1
Para a maioria dos usuários, acho que é suficiente fazer / e (incluir diretórios vazios).
Phsource
3
Observe que robocopyretorna um código de saída 1 se um ou mais arquivos foram copiados com êxito.
dougnorton
15

Você pode escrever um algoritmo recursivo no Lote que fornece controle exato do que você faz em todos os subdiretórios aninhados:

@echo off
call :treeProcess
goto :eof

:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
copy *.* C:\dest\dir
for /D %%d in (*) do (
    cd %%d
    call :treeProcess
    cd ..
)
exit /b

Arquivo de lote do Windows fazendo loop através de diretórios para processar arquivos?

Aacini
fonte
4
Ótima idéia, mas seu programa não copia todos os arquivos dos diretórios de origem em um único diretório de destino sem preservar a hierarquia de pastas?
Jean-Francois T.