Arquivo em lote para copiar diretórios recursivamente


121

Existe uma maneira de copiar diretórios recursivamente dentro de um arquivo .bat? Nesse caso, um exemplo seria ótimo. obrigado.


2
você quer dizer xcopy / s? ou a robocópia mais avançada?
Rene

Isso pode ajudá-lo, embora isso exclui você pode facilmente mudar para copiar em vez daniweb.com/web-development/threads/61479/...
Georges Chitiga

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


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

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?


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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.