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.

Scott Chamberlain
fonte
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.

vivin
fonte
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 ]

Hastur
fonte
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.

Program-Me-Rev
fonte
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.

paradroid
fonte
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
5
XCOPY SourceDrive: DestinationDrive: /S /E

Por exemplo, se você precisar copiar os E:dados da H:unidade para a unidade (disco rígido externo) através da linha de comando ou do ambiente de comando xboot.

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
Syed khalid Mohammed
fonte
2
/ S não é necessário quando / E está presente. windows-commandline.com/copy-directory-command-line #
Giri
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.

Conta
fonte
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

NetwOrchestration
fonte
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.

mahendrent
fonte
0

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

Noor All Safaet
fonte
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.

MauGusVicen
fonte