web-dev-qa-db-fra.com

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

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

J'aimerais copier C:/test dans C:/test2 pour que le résultat soit C:/test2/test

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

62
agezna

Essayez d’utiliser XCOPY avec le commutateur /E. Plus d'infos ici .

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

UPDATE

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 d'abord test dans C:\test2, puis utiliser XCOPY.

48
vivin
xcopy c:\test c:\test2\test /s /e /h

Voici des infos sur XCOPY [ 1 , 2 ]

32
Zachary

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 souhaiterez peut-être inclure la possibilité de redémarrer le processus au cas où la connexion serait 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.

15
Program-Me-Rev

Je recommande robocopy over xcopy , car il a beaucoup plus d’options, y compris conserver les horodatages intacts, ce 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.

8
paradroid
XCOPY SourceDrive: DestinationDrive: /S /E

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

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
5

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\test n'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 variable mydir 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.

3
Bill

XCOPY SourceDrive: DestinationDrive:/S/E

0
Noor All Safaet
xcopy SWITCHES SOURCE DESTINATION

SWITCHES peut ê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
NetwOrchestration

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

Premièrement, l’utilisation du paramètre FORFILES avec /S permet d’atteindre chaque sous-répertoire de C:\test.

Deuxièmement, avec le paramètre /C, 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 dans ceux-ci, en utilisant deux structures conditionnelles.

La première structure conditionnelle @isdir==TRUE (assurez-vous d’utiliser des lettres majuscules), permet d’obtenir les répertoires uniquement à partir de la source, puis de les créer au destin 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 effectue simplement le travail, obtenant tous les fichiers atteints avec la commande FORFILES, en définissant [path]@relpath comme destination, pour copier les fichiers dans le fichier créé des répertoires.

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.

0
MauGusVicen

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 à partir de C:\Windows\Assembly\GAC_MSIL. L'Explorateur Windows refuse d'afficher ce dossier, vous devez donc utiliser une commande Invite.

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 en cas de frappe incorrecte.

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

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
mahendrent