Comando della riga di comando per copiare l'intera directory (inclusa la cartella della directory) in un'altra directory


68

usando la riga di comando, vorrei copiare una directory in un'altra. Ad esempio c'è directory C:/teste C:/test2.

Vorrei copiarlo C:/testin C:/test2modo che il risultato siaC:/test2/test

Tutto ciò che ho trovato finora copierà solo i file e le cartelle contenuti C:/testin C:/test2, ma tralascerà la directory principale.


1
prova a usare xcopy

Risposte:


50

Prova a utilizzare XCOPYcon l' /Einterruttore. Maggiori informazioni qui .

Non ho dovuto accedere a queste informazioni dal mio cervello da anni !

AGGIORNARE

La documentazione dice che copia tutti i file e le sottodirectory dalla directory di origine (il che significa che la directory padre non viene creata), in modo che avrebbe dovuto creare testin C:\test2prima e poi utilizzare XCOPY.


2
L'opzione '/ T' su Xcopy eseguirà una copia della struttura di directory e sottodirectory senza alcun file.
mfg

2
Meglio usare robocopy /CREATE /COPYALL /DCOPY:T src dstsolo per copiare la cartella e svuotare i file ma preservare tutti i timestamp e gli altri attributi.
user1016274

2
Questo in realtà non fornisce la risposta alla domanda perché la cartella deve testancora essere creata.
IGRACH,

3
@IGRACH Ho pensato md teste quindi l'utilizzo xcopyera banalmente ovvio.
Vivin,

1
Bene, la domanda riguarda la copycartella che non crea una nuova cartella e quindi copia i conten in essa contenuti.
IGRACH,

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

Ecco le informazioni su XCOPY [ 1 , 2 ]


2
Come smettere di chiedermi di inserire "D"?
YumYumYum

2
@YumYumYum: è possibile utilizzare l'opzione / I: "/ I Se la destinazione non esiste e si copia più di un file, si presuppone che la destinazione debba essere una directory."
Thijs Tijsma,

18

Usa ROBOCOPY se stai creando script di backup. la xcopy è stata deprecata e probabilmente sarà gradualmente eliminata nel prossimo futuro. robocopy può fare tutto ciò che xcopy può fare. È anche più flessibile e affidabile. La creazione di script con robocopy li renderà a prova di futuro.


  1. Usa robocopy per copiare facilmente le cartelle. Il comando robocopy sostituisce il comando xcopy. Può copiare rapidamente intere cartelle senza doversi preoccupare di definire il contenuto. Ad esempio, per copiare tutto il contenuto della directory C: \ tools nella nuova cartella D: \ backup \ tools, immettere quanto segue:

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

    Il modificatore / e dice a robocopy di includere tutte le sottodirectory. Questo include cartelle vuote. robocopy copia automaticamente i file nascosti e di sistema. Creerà nuove directory se non esistono nella posizione di destinazione.

  2. Mirroring di una directory. Il mirroring di una directory è ottimo per eseguire i backup. L'opzione mirror di robocopy copierà tutti i contenuti dall'origine alla destinazione. Quindi eliminerà qualsiasi cosa nella destinazione che non esiste alla fonte. Ciò garantisce che il backup disponga solo delle ultime versioni dei file. Ad esempio, per eseguire il mirroring di C: \ Users \ My Documents su D: \ backup \ My Documents, immettere quanto segue: [4]

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

    Questa funzione conserverà tutte le autorizzazioni dei file originali.

  3. Abilita il riavvio. È possibile che si desideri includere la possibilità di riavviare il processo nel caso in cui la connessione venga interrotta durante la copia.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Registra il processo di copia. robocopy ti consente di creare un file di registro. Questo può aiutarti a individuare i problemi o generare un archivio di ciò che è stato copiato.

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

    Il modificatore / log + aggiungerà il file di registro esistente invece di sovrascriverlo. Se preferisci sovrascrivere il vecchio file di registro, usa /log:.txt.


8

Raccomando robocopy su xcopy , in quanto ha molte più opzioni, tra cui mantenere intatti i timestamp, che trovo essenziali.

Robocopy deve essere aggiunto su XP / 2003, ma è standard da Vista in poi.

In realtà di solito uso xxcopy , ma la versione a 64 bit non è gratuita.


1
robocopyè un programma Windows. La domanda riguardava DOS.
Grawity

9
@grawity: La probabilità che utilizzi effettivamente DOS a 16 bit è molto piccola rispetto all'elevata probabilità che lui chiami CMD "DOS", come è comune nel mondo reale.
paradroid

la vera domanda è: robocopy è un programma Microsoft?
Knocte,

@knocte sì, lo è
yossico


3

Se la domanda originale è ciò a cui stavo cercando una risposta, allora, e ovviamente nessuno sopra, ho trovato una soluzione chiara.

Quello che sto cercando è copiare la directory test nella directory test2 senza doverla digitare nuovamente. Qualcosa di simile a

xcopy /isvy c:\test d:\test2

dove d:\test2\testnon esiste prima della copia ma dopo. Ciò consentirebbe di risparmiare sul test di digitazione non eseguita la seconda volta nel percorso di destinazione. Il comando sopra copierà tutti i file e tutte le directory in test2 ma non creerà la directory di test.

Finora

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

è davvero l'unico modo che ho trovato per fare questo lavoro. Ancora una volta, se si hanno problemi di battitura, non vi è alcuna garanzia che le directory di origine e destinazione corrispondano.

Un'alternativa per correggere questo è

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

Questo imposta la directory di destinazione nella mydirvariabile quindi utilizza quella variabile sia nel percorso di origine che di destinazione. Se si digita la variabile in modo errato si otterrà un errore o la directory di destinazione avrà probabilmente %all'inizio e alla fine.

È più lungo da digitare ma meno possibilità di ottenere nomi sbagliati. Saranno evidenti.


In realtà è xcopy /ievy c:\test d:\test2\testper mantenere la struttura ad albero delle directory, e in set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%solo 1 e sarà sufficiente, poiché il risultato dell'impostazione di un valore ha sempre successo.
NetwOrchestration,

0
xcopy SWITCHES SOURCE DESTINATION

Dove SWITCHESpuò essere:

  • Per copiare l'intera struttura della directory:

    /hiev

  • Per sovrascrivere i file nella destinazione (nel caso in cui la cartella di destinazione esiste già):

    /hievry

  • Per sovrascrivere e anche copiare con ACL + Attributo:

    /hievxok

Più adatto al tuo caso:

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


0

Ho avuto una situazione simile in cui avevo bisogno di copiare un numero di cartelle tra cui i nomi delle cartelle in una posizione di destinazione, e speravo che questa domanda contrassegnata con la risposta potesse essere d'aiuto, ma in realtà no.

In primo luogo, ci sono sicuramente occasioni in cui uno avrebbe bisogno di questa capacità e mi sono imbattuto in uno quando dovevo copiare le cartelle da C: \ Windows \ Assembly \ GAC_MSIL. Windows Explorer rifiuta di mostrare questa cartella, quindi è necessario utilizzare un prompt dei comandi.

Se hai familiarità con la cartella GAC, sapresti che i nomi delle cartelle non sono banali e puoi sbagliare facilmente se digiti male.

Quindi la creazione anticipata della directory non è davvero un'opzione - a meno che non si usi uno script - che ho finito per usare, poiché questa era l'unica vera soluzione.

Prima scaricare le cartelle che si desidera copiare in un file temporaneo, questo di solito si basa su un modello ad es

dir /B policy* > Folders.txt

Quindi scorrere le voci nel dump e copiarle nella destinazione. Xcopy si occuperà della creazione di una cartella se si termina l'argomento di destinazione con una barra rovesciata (\)

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

Metti entrambi questi comandi in un file batch ed esegui.

Ora se solo xcopy o robocopy hanno questo incorporato.


0

XCOPY SourceDrive: DestinationDrive: / S / E


Benvenuto in Super User! Puoi spiegarlo? (specialmente le /S /Ebandiere)
bertieb

0

Sono arrivato a una risposta alternativa funzionale alla tua domanda.

Innanzitutto, usando FORFILEScon /Sparametro, confermo che ogni sottodirectory in C:\testsarà raggiunta.

In secondo luogo, con il /Cparametro, è possibile avviare una catena di comandi con variabili native, il che rende possibile creare le directory identiche nella destinazione e quindi copiare i file al loro interno, usando due strutture condizionali.

La prima struttura condizionale @isdir==TRUE(assicurati di usare le lettere maiuscole), consente di ottenere directory solo dalla fonte, quindi crearle al destino con MKDIR [path]\@relpathalla fine.

Infine, il secondo si assicura che funzioni solo con i file @isdir==FALSEe quindi il comando COPY semplicemente esegue il lavoro, facendo in modo che tutti i file raggiungano il comando FORFILES, impostandolo [path]@relpathcome destinazione, per copiare i file all'interno delle directory appena create.

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

Spero che aiuti tutti qui.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.