Comando de linha de comando para copiar o diretório inteiro (incluindo a pasta do diretório) para outro diretório


68

usando a linha de comando, eu gostaria de copiar um diretório para outro. Por exemplo, há diretório C:/teste C:/test2.

Eu gostaria de copiar C:/testem C:/test2modo que o resultado seráC:/test2/test

Tudo o que eu encontrei até agora só vai copiar os arquivos e pastas contidas C:/testem C:/test2, mas deixa de fora o diretório pai.


11
tente usar o xcopy

Respostas:


50

Tente usar XCOPYcom o /Einterruptor. Mais informações aqui .

Não tenho acesso a essas informações do meu cérebro há anos !

ATUALIZAR

A documentação diz que ele copia todos os arquivos e subdiretórios do diretório de origem (o que significa que o diretório pai não é criado), então você teria que criar testno C:\test2primeiro e depois usar XCOPY.


2
A opção '/ T' no Xcopy fará uma cópia da estrutura de diretórios e subdiretórios sem nenhum arquivo.
Mfg

2
É melhor usar robocopy /CREATE /COPYALL /DCOPY:T src dstapenas copiar a pasta e os arquivos vazios, mas preservar todos os carimbos de data e hora e outros atributos.
user1016274

2
Na verdade, isso não fornece resposta para a pergunta porque a pasta testainda precisa ser criada.
IGRACH 18/08/16

3
@IGRACH Eu pensei que md testusar xcopyera trivialmente óbvio.
Vivin

11
Bem, a pergunta é sobre a copypasta não criar uma nova pasta e copiar os conteúdos nela.
IGRACH 18/08/19

35
xcopy c:\test c:\test2\test /s /e /h

Aqui estão as informações sobre o XCOPY [ 1 , 2 ]


2
Como parar de me pedir para inserir "D"?
YumYumYum

2
@YumYumYum: Você pode usar a opção / I: "/ I Se o destino não existir e copiar mais de um arquivo, assume que esse destino deve ser um diretório".
Thijs Tijsma

18

Use ROBOCOPY se você estiver criando scripts de backup. O xcopy foi descontinuado e provavelmente será desativado em breve. A robocopy pode fazer tudo o que o xcopy pode. Também é mais flexível e confiável. Criar scripts com robocopy os tornará à prova de futuro.


  1. Use robocopy para copiar pastas facilmente. O comando robocopy substitui o comando xcopy. Ele pode copiar rapidamente pastas inteiras sem precisar se preocupar em definir o conteúdo. Por exemplo, para copiar todo o conteúdo do diretório C: \ tools para a nova pasta D: \ backup \ tools, digite o seguinte:

    robocopy C:\tools D:\backup\tools /e
    

    O modificador / e diz ao robocopy para incluir todos os subdiretórios. Isso inclui pastas vazias. O robocopy copia automaticamente os arquivos ocultos e do sistema. Ele criará novos diretórios se eles não existirem no local de destino.

  2. Espelhe um diretório. O espelhamento de um diretório é ótimo para fazer backups. A opção de espelhamento do robocopy copiará todo o conteúdo da origem para o destino. Ele excluirá qualquer coisa no destino que não exista na fonte. Isso garante que seu backup tenha apenas as versões mais recentes de seus arquivos. Por exemplo, para espelhar C: \ Usuários \ Meus Documentos em D: \ backup \ Meus Documentos, digite o seguinte: [4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    Esta função preservará todas as permissões dos arquivos originais.

  3. Ative a reinicialização. Convém incluir a capacidade de reiniciar o processo, caso a conexão seja cortada no meio da cópia.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Registre o processo de cópia. robocopy permite criar um arquivo de log. Isso pode ajudá-lo a identificar problemas ou gerar um arquivo do que foi copiado.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    O modificador / log + acrescentará o arquivo de log existente em vez de substituí-lo. Se você preferir substituir o arquivo de log antigo, use /log:.txt.


8

Eu recomendo a robocopy sobre o xcopy , pois ele tem muito mais opções, incluindo manter os timestamps intactos, o que acho essencial.

O robocopy precisa ser adicionado no XP / 2003, mas é padrão do Vista em diante.

Na verdade, eu geralmente uso o xxcopy , mas a versão de 64 bits não é gratuita.


11
robocopyé um programa do Windows. A pergunta era sobre o DOS.
#

9
@rawrawity: A probabilidade de ele realmente usar o DOS de 16 bits é muito pequena se comparada à alta probabilidade de ele chamar o CMD de 'DOS', como é comum no mundo real.
Paradroid

a verdadeira questão é: o robocopy é um programa da Microsoft?
knocte

@knocte sim, é
yossico


3

Se a pergunta original é o que eu estava procurando uma resposta, então eu, e obviamente ninguém acima, encontrei uma solução clara.

O que estou procurando é copiar o diretório de teste no diretório test2 sem precisar digitá-lo novamente. Algo como

xcopy /isvy c:\test d:\test2

onde d:\test2\testnão existe antes da cópia, mas existe depois. Isso economizaria no teste de digitação incorreta pela segunda vez no caminho de destino. O comando acima copiará todos os arquivos e diretórios para o test2, mas não criará o diretório de teste.

Tão longe

xcopy /isvy c:\test d:\test2\test

é realmente a única maneira que encontrei para realizar esse trabalho. Novamente, se você tiver problemas de digitação, não há garantia de que os diretórios de origem e destino correspondam.

Uma alternativa para corrigir isso é

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

Isso define o diretório de destino na mydirvariável e depois usa essa variável no caminho de origem e de destino. Se você digitar a variável incorretamente, receberá um erro ou o diretório de destino provavelmente terá %no início e no final.

É mais longo para digitar, mas menos chance de obter os nomes errados. Eles serão visíveis.


Na verdade, é xcopy /ievy c:\test d:\test2\testpara manter a estrutura da árvore de diretórios e set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%apenas 1 & será suficiente, pois o resultado da definição de um valor sempre é bem-sucedido.
NetwOrchestration

0
xcopy SWITCHES SOURCE DESTINATION

Onde SWITCHESpode estar:

  • Para copiar toda a estrutura de diretórios:

    /hiev

  • Para substituir arquivos no destino (caso a pasta de destino já exista):

    /hievry

  • Para substituir e também copiar com o atributo ACL +:

    /hievxok

Mais adequado ao seu caso:

xcopy /hievry C:\test C:\test2\test


0

Eu tive uma situação semelhante em que precisei copiar várias pastas, incluindo os nomes das pastas para um local de destino, e esperava que essa pergunta marcada como respondida ajudasse, mas realmente não.

Primeiramente, há definitivamente ocasiões em que alguém precisaria dessa capacidade e eu encontrei uma quando tive que copiar pastas de C: \ Windows \ Assembly \ GAC_MSIL. O Windows Explorer se recusa a mostrar esta pasta, então você precisa usar um prompt de comando.

Se você estiver familiarizado com a pasta GAC, saberá que os nomes das pastas não são triviais e fáceis de errar se digitar incorretamente.

Portanto, criar o diretório antecipadamente não é realmente uma opção - a menos que você use um script - que acabei usando, pois essa era a única solução real.

Primeiro despeje as pastas que você deseja copiar para um arquivo temporário, isso geralmente é baseado em algum padrão, por exemplo

dir /B policy* > Folders.txt

Em seguida, faça um loop sobre as entradas no dump e copie para o destino. O Xcopy cuidará da criação de uma pasta se você encerrar o argumento de destino com uma barra invertida (\)

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

Coloque esses dois comandos em um arquivo em lotes e execute.

Agora, se apenas o xcopy ou o robocopy tem isso embutido.


0

Unidade de origem XCOPY: Unidade de destino: / S / E


Bem-vindo ao Super Usuário! Você pode explicar isso? (especialmente as /S /Ebandeiras)
bertieb

0

Cheguei a uma resposta alternativa funcional para sua pergunta.

Primeiramente, usando FORFILEScom o /Sparâmetro, confere que todos os subdiretórios C:\testserão alcançados.

Em segundo lugar, com o /Cparâmetro, é possível iniciar uma cadeia de comandos com variáveis ​​nativas, o que possibilita criar os diretórios idênticos no destino e, em seguida, copiar os arquivos para dentro deles, usando duas estruturas condicionais.

A primeira estrutura condicional @isdir==TRUE(certifique-se de usar letras maiúsculas), permite obter diretórios apenas da fonte e, em seguida, criá-los no destino e MKDIR [path]\@relpathno final.

Finalmente, o segundo garante que ele esteja trabalhando apenas com arquivos @isdir==FALSEe, em seguida, o comando COPY simplesmente faz o trabalho, obtendo todos os arquivos alcançados pelo comando FORFILES, definindo [path]@relpathcomo destino, para copiar os arquivos para dentro dos diretórios recém-criados.

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

Espero que ajude todos por aqui.


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.