Commande de ligne de commande pour copier le répertoire entier (y compris le dossier) dans un autre répertoire

68

en utilisant la ligne de commande, je voudrais copier un répertoire dans un autre. Par exemple, il y a un répertoire C:/testet C:/test2.

Je voudrais copier C:/testdans C:/test2afin que le résultat seraC:/test2/test

Tout ce que j'ai trouvé jusqu'ici ne fera que copier les fichiers et les dossiers contenus C:/testdans C:/test2, mais en laissant de côté le répertoire parent.

Scott Chamberlain
la source
1
essayez d'utiliser xcopy

Réponses:

50

Essayez d'utiliser XCOPYavec le /Ecommutateur. Plus d'infos ici .

Je n'ai pas eu à accéder à cette information de mon cerveau depuis des années !

MISE À JOUR

La documentation indique qu'elle copie tous les fichiers et sous-répertoires du répertoire source (ce qui signifie que le répertoire parent n'est pas créé). Vous devez donc créer testen C:\test2premier, puis utiliser XCOPY.

vivin
la source
2
Le commutateur '/ T' sur Xcopy effectuera une copie de la structure de répertoires et de sous-répertoires sans aucun fichier.
Mfg
2
Il est préférable d’utiliser robocopy /CREATE /COPYALL /DCOPY:T src dstsimplement le dossier et les fichiers vides, tout en conservant tous les horodatages et autres attributs.
user1016274
2
En fait, cela ne fournit pas de réponse à la question, car le dossier doit testencore être créé.
IGRACH
3
@IGRACH je pensais md testet ensuite utiliser xcopyétait trivialement évident.
Vivin
1
La question concerne le copydossier qui ne crée pas de nouveau dossier et ne copie pas les contenus qu’il contient.
IGRACH
35
xcopy c:\test c:\test2\test /s /e /h

Voici des infos sur XCOPY [ 1 , 2 ]

Hastur
la source
2
Comment arrêter de me demander de saisir "D"?
YumYumYum
2
@YumYumYum: vous pouvez utiliser le commutateur / I: "/ I Si la destination n'existe pas et que vous copiez plusieurs fichiers, supposez que cette destination doit être un répertoire."
Thijs Tijsma
18

Utilisez ROBOCOPY si vous créez des scripts de sauvegarde. xcopy est obsolète et ne sera probablement plus utilisé dans un proche avenir. Robocopy peut faire tout ce que xcopy peut faire. Il est également plus flexible et fiable. Créer des scripts avec robocopy les protégera de l'avenir.


  1. Utilisez robocopy pour copier facilement des dossiers. La commande robocopy remplace la commande xcopy. Il peut rapidement copier des dossiers entiers sans avoir à se soucier de la définition du contenu. Par exemple, pour copier tout le contenu du répertoire C: \ tools dans le nouveau dossier D: \ backup \ tools, entrez la commande suivante:

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

    Le modificateur / e indique à robocopy d'inclure tous les sous-répertoires. Cela inclut les dossiers vides. robocopy copiera automatiquement les fichiers cachés et système. Il créera de nouveaux répertoires s’ils n’existent pas à l’emplacement cible.

  2. Mettre en miroir un répertoire. La mise en miroir d'un répertoire est idéale pour effectuer des sauvegardes. L'option miroir de robocopy copiera tout le contenu de la source vers la destination. Il supprimera alors tout ce qui existe à la destination et n’existe pas à la source. Cela garantit que votre sauvegarde ne contient que les dernières versions de vos fichiers. Par exemple, pour mettre en miroir C: \ Utilisateurs \ Mes documents sur D: \ backup \ Mes documents, entrez les informations suivantes: [4]

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

    Cette fonction préservera toutes les autorisations des fichiers originaux.

  3. Activer le redémarrage. Vous voudrez peut-être inclure la possibilité de redémarrer le processus si la connexion est interrompue en cours de copie.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Enregistrez le processus de copie. Robocopy vous permet de créer un fichier journal. Cela peut vous aider à identifier des problèmes ou à créer une archive de ce qui a été copié.

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

    Le modificateur / log + ajoutera le fichier journal existant au lieu de l'écraser. Si vous préférez simplement écraser l'ancien fichier journal, utilisez /log:.txt.

Programme-moi-rev
la source
8

Je recommande robocopy sur xcopy , car il a beaucoup plus d' options, y compris la tenue intacte horodatages, que je trouve essentiel.

Robocopy doit être ajouté sur XP / 2003, mais il est standard à partir de Vista.

En fait, j'utilise habituellement xxcopy , mais la version 64 bits n'est pas gratuite.

paradroïde
la source
1
robocopyest un programme Windows. La question concernait le DOS.
grawity
9
@grawity: La probabilité qu'il utilise réellement le DOS 16 bits est très faible comparé à la forte probabilité qu'il appelle CMD «DOS», comme cela est courant dans le monde réel.
Paradroid
la vraie question est: est-ce que robocopy est un programme Microsoft?
knocte
@knocte oui, c'est ça
Yossico
5
XCOPY SourceDrive: DestinationDrive: /S /E

Par exemple, si vous devez copier E:des données de H:lecteur sur un lecteur (disque dur externe) via une ligne de commande ou à partir de l'environnement de commande xboot.

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
Syed khalid Mohammed
la source
2
/ S n'est pas requis lorsque / E est présent. windows-commandline.com/copy-directory-command-line
Giri
3

Si la question initiale est ce à quoi je cherchais une réponse, alors moi-même et personne d’autre, c’est une solution claire.

Ce que je recherche, c’est de copier le répertoire test dans le répertoire test2 sans avoir à le taper à nouveau. Quelque chose comme

xcopy /isvy c:\test d:\test2

d:\test2\testn'existe pas avant la copie mais après. Cela permettrait d’économiser sur le test de saisie en échec la deuxième fois dans le chemin de destination. La commande ci-dessus copiera tous les fichiers et tous les répertoires dans test2 mais ne créera pas le répertoire de test.

Jusque là

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

C'est vraiment le seul moyen que j'ai trouvé pour faire ce travail. Là encore, si vous rencontrez des problèmes de frappe, rien ne garantit que les répertoires source et de destination seront identiques.

Une alternative pour corriger ceci est

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

Ceci définit le répertoire de destination dans la mydirvariable puis utilise cette variable à la fois dans le chemin source et le chemin de destination. Si vous tapez mal la variable, vous obtiendrez une erreur ou le répertoire de destination aura probablement %au début et à la fin.

Il est plus long de taper mais moins de chances d’obtenir les mauvais noms. Ils seront remarquables.

Facture
la source
Il s’agit en fait xcopy /ievy c:\test d:\test2\testde conserver l’arborescence des répertoires, et dans set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%seulement 1 & suffira, car le résultat de la définition d’une valeur est toujours réussi.
NetwOrchestration
0
xcopy SWITCHES SOURCE DESTINATION

SWITCHESpeut être:

  • Pour copier la structure de répertoires complète:

    /hiev

  • Pour écraser les fichiers de la destination (si le dossier de destination existe déjà):

    /hievry

  • Pour écraser et copier avec ACL + Attribute:

    /hievxok

Le plus adapté à votre cas:

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

NetwOrchestration
la source
0

Dans une situation similaire, je devais copier un certain nombre de dossiers, y compris les noms de dossier, vers un emplacement de destination. J'espérais que cette question marquée comme étant résolue aiderait, mais ce n'est vraiment pas le cas.

Premièrement, il y a certainement des occasions où on aurait besoin de cette capacité et je me suis heurté à l'une d'elles lorsque je devais copier des dossiers de C: \ Windows \ Assembly \ GAC_MSIL. L'Explorateur Windows refuse d'afficher ce dossier, vous devez donc utiliser une invite de commande.

Si vous connaissez le dossier GAC, vous saurez que les noms de dossier ne sont pas triviaux et qu'il est facile de se tromper si vous vous trompez.

Donc, la création préalable du répertoire n’est pas vraiment une option - à moins que vous utilisiez un script - que j’ai finalement utilisé, car c’était la seule solution réelle.

Commencez par vider les dossiers que vous souhaitez copier dans un fichier temporaire (ceci est généralement basé sur un modèle, par exemple:

dir /B policy* > Folders.txt

Puis passez en boucle sur les entrées du dump et copiez-les dans la destination. Xcopy se chargera de créer un dossier si vous terminez l'argument de destination avec une barre oblique inverse (\)

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

Placez ces deux commandes dans un fichier de commandes et exécutez-les.

Maintenant, si seulement xcopy ou robocopy a cela intégré.

mahendrent
la source
0

XCOPY SourceDrive: DestinationDrive: / S / E

Noor All Safaet
la source
Bienvenue sur Super User! Pouvez-vous expliquer cela? (surtout les /S /Edrapeaux)
bertieb
0

Je suis venu à une réponse fonctionnelle alternative pour votre question.

Tout d'abord, l'utilisation FORFILESde /Sparamètre avec , confère que chaque sous-répertoire C:\testsera atteint.

Deuxièmement, avec /Cparamètre, il est possible de démarrer une chaîne de commandes avec des variables natives, ce qui permet de créer les répertoires identiques sur la destination, puis de copier les fichiers à l'intérieur, en utilisant deux structures conditionnelles.

La première structure conditionnelle @isdir==TRUE(assurez-vous d’utiliser des majuscules), permet d’obtenir les répertoires uniquement à partir de la source, puis de les créer à la destination avec MKDIR [path]\@relpathà la fin.

Enfin, le second s'assure qu'il travaille avec des fichiers uniquement avec @isdir==FALSE, puis la commande COPY exécute simplement le travail, en obtenant tous les fichiers atteints par la commande FORFILES, en définissant [path]@relpathla destination, pour copier les fichiers dans les répertoires qui viennent d'être créés.

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

J'espère que cela aide tout le monde ici.

MauGusVicen
la source
-2

Cela le fera à partir de l'interface graphique, je ne sais pas comment ils le font.

"... petit programme vous permettra de sélectionner le" à partir du répertoire "et" dans le répertoire ", et il continuera à copier UNIQUEMENT la structure du répertoire."

http://www.rjlsoftware.com/software/utility/treecopy/

NginUS
la source