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.


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.


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 ]


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.


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.


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


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.


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


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é.


0

XCOPY SourceDrive: DestinationDrive: / S / E


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.


-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/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.