Utiliser robocopy et exclure plusieurs annuaires

60

J'essaie de copier certains répertoires d'un serveur avant de restaurer une sauvegarde (ma dernière sauvegarde était corrompue, je dois donc utiliser un ancien :(). Je suis dans l'environnement de récupération Windows et j'ai accès au fichier du serveur. système G:\et mon support de sauvegarde C:\, mais comme je suis plus familier avec Linux, j’ai un peu de mal à utiliser la ligne de commande dans Windows, en particulier robocopy.

Je souhaite copier plusieurs répertoires (en conservant la même structure de répertoires) de G: \ à C: \ tout en en excluant d’autres (à savoir les dossiers Windows et Program Files). Je n'arrive pas à comprendre la syntaxe de l' /XDoption. J'espérais faire quelque chose comme:

robocopy G: C:\backup /CREATE /XD "dir1","dir2", ...

REMARQUE: je tiens à préciser que je souhaite copier les fichiers réels tout en conservant la structure de répertoires. Je viens de vérifier et /createne crée que des fichiers vides. Bizarre.

GorrillaMcD
la source

Réponses:

92

Je l'ai compris avec un peu d'essais et d'erreur et le /L(pour tester la commande avant de le faire pour de vrai). La commande avec laquelle je me retrouve est:

robocopy G: C:\backup /MIR /XD G:\dir1 "G:\dir 2" G:\dir3 ...

Apparemment, les barres obliques de fin empêchent Robocopy d’analyser correctement la liste des répertoires. Veillez donc à ne pas inclure de barres obliques à la fin des noms de répertoires et veillez à mettre des guillemets autour des répertoires avec des espaces.

L' /MIRoption conserve la même structure de répertoires lors de la copie des fichiers.

Edit: Après quelques recherches supplémentaires, j’ai un peu amélioré la commande:

robocopy G: C:\backup /MIR /Z /LOG:C:\todaysdate-backup.log /XF *.iso *.log *.au /XD G:\dir1 ...

Les ajouts sont les suivants:

  • /Z permet de relancer le travail
  • /LOG:<logfile path> est assez explicite.
  • /XF est utilisé pour exclure certains types de fichiers afin qu'il ne prenne pas si longtemps
GorrillaMcD
la source
1
Vous pouvez toujours utiliser le /?commutateur pour obtenir des informations d'aide pour les commandes de la console Windows. Il y a aussi la helpcommande, qui ressemble au manprogramme Linux , mais je ne l'ai pas vue utilisée par des programmes tiers (cela pourrait être - je ne connais pas son fonctionnement, ni même si c'est possible).
Ben Richards
Hé, merci pour le commentaire. Je pensais qu'il y avait une helpcommande, mais elle ne semble pas être active dans l'environnement de récupération Windows (j'ai reçu une erreur du type "Aucune commande 'aide' trouvée"). Robocopy est une commande Windows par défaut qui a remplacé xcopy et n'est pas une tierce partie.
GorrillaMcD
1
Je sais que c'est une commande Windows et non une tierce partie. Je viens de mettre cela là-dedans juste pour la référence future, puisque vous avez dit que vous n'êtes pas aussi familier avec l'environnement de commande de Windows. :)
Ben Richards
2
Précision: /MIR(le miroir A à B) détruit tous les fichiers de B qui ne sont pas présents dans A. Ceci est utile lorsque le répertoire dans lequel vous copiez existe déjà et que vous voulez que la nouvelle version (de B) soit une copie exacte de A (tel qu'il existe actuellement).
SherylHohman
4

Je sais que cela ne répond pas à la question de OP, mais à quiconque ici, de Google: XD échouera dans un fichier de travail si vous utilisez des guillemets.

Mauvais:

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        "Temporary Internet Files"

Bien:

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        Temporary Internet Files

Placez autant d'exclusions que vous le souhaitez, ligne après ligne, sans utiliser de guillemets (qu'il y ait ou non des espaces).

J'ai découvert cela en utilisant le commutateur de ligne de commande / SAVE: myjobname qui a enlevé les citations de mes répertoires cités!

Chris
la source
4

vous devez répéter la /XDpartie

C:\>robocopy "C:\Users\weberjn\Google Drive" "u:\Google Drive" /e /dcopy:t /copy:DT /r:0 /XD "C:\Users\weberjn\Google Drive\photos" /XD "C:\Users\weberjn\Google Drive\Google Photos"
Weberjn
la source
1

Ma solution pour cela était de créer des fichiers .txt contenant les fichiers ou les répertoires que je veux inclure ou exclure. J'ai ces fichiers dans un sous-dossier "rcXcludes" sous mon dossier "Backup". Ma méthode pour nommer les fichiers est la suivante. Je les préface avec "rc" (pour robocopy), puis une notation reconnaissable pour l'application ou une partie du système de fichiers dans la commande robocopy, puis j'ajoute "B" ou "R" (pour la sauvegarde ou la restauration), puis "I" ou "X" (pour inclure ou exclure), puis "D" ou "F" (pour répertoire ou fichier). J'entoure chaque entrée de guillemets et d'un espace entre les entrées. Un fichier "Include" peut contenir des fichiers ou des répertoires, mais les répertoires doivent comporter une barre oblique inversée. Dans un fichier "Exclure" pour les répertoires, vous n'utilisez pas de barre oblique inverse. Toutes les entrées de répertoire sont relatives au chemin source dans la commande robocopy. L’intégralité du contenu de ces fichiers .txt doit figurer sur une seule ligne etne pas avoir un retour à la ligne carraige. Dans mon fichier de commandes, j'utilise une commande SET / P pour importer le fichier .txt dans une variable. J'utilise ensuite ces variables pour FILES ou après / XF ou / XD. Par exemple, pour utiliser le profil Chrome de l'utilisateur actuel sans copier l'intégralité du dossier "Par défaut", j'utilise ce qui suit.

rcChromeBIF.txt  
"Bookmarks" "Custom Dictionary.txt" "Extension Cookies" "Favicons" "History" "Login Data" "Preferences" "Top Sites" "Visited Links" "Web Data" "Databases\" "Extensions\" "Local Storage\" "Plugin Data\" "User Scripts\" "User StyleSheets\"

rcChromeBXF.txt  
"Bookmarks.bak" "ChromeDWriteFontCache" "Cookies" "Cookies-journal" "Current Session" "Current Tabs" "Extension Cookies-journal" "Favicons-journal" "Google Profile.ico" "History Provider Cache" "History-journal" "Last Session" "Last Tabs" "Login Data-journal" "Network Action Predictor" "Network Action Predictor-journal" "Network Persistent State" "Origin Bound Certs" "Origin Bound Certs-journal" "QuotaManager" "QuotaManager-journal" "README" "Secure Preferences" "Shortcuts" "Shortcuts-journal" "Top Sites-journal" "TransportSecurity" "Web Data-journal"

rcChromeBXD.txt  
"Application Cache" "Cache" "data_reduction_proxy_leveldb" "Extension State" "File System" "GPUCache" "IndexedDB" "JumpListIcons" "JumpListIconsOld" "Local Extension Settings" "Media Cache" "Pepper Data" "Platform Notifications" "Service Worker" "Session Storage" "Storage" "Thumbnails" "Web Applications"

Dans le fichier chauve-souris, disons C: \ Backup.

REM ChromeBak.bat
SET chromeprofdir=Google\Chrome\User Data\Default
SET /P rcChrmBIF=<C:\Backup\rcXcludes\rcChromeBIF.txt
SET /P rcChrmBXF=<C:\Backup\rcXcludes\rcChromeBXF.txt
SET /P rcChrmBXD=<C:\Backup\rcXcludes\rcChromeBXD.txt
robocopy "%LOCALAPPDATA%\%chromeprofdir%" "H:\ChromeBackup\%chromeprofdir%" %rcChrmBIF% /E /ZB /COPY:DAT /DCOPY:T /MT:4 /XJ /XF %rcChrmBXF% /XD %rcChrmBXD% /R:10 /W:2 /TBD /NP /V /TS /Log+:"H:\ChromeBackup\ChromeBackup.log"
Charlie C
la source