web-dev-qa-db-fra.com

Comment exclure des sous-répertoires de la destination lors de l'utilisation du commutateur/mir/xd dans robocopy

Il y a un script en cours d'exécution qui reflète un tas de dossiers d'un volume à un autre. Le problème est qu’il va maintenant y avoir des sous-répertoires dans les dossiers de la destination qui ne font pas partie du script de mise en miroir original. Ce sont des sous-répertoires autonomes et je ne veux pas qu'ils soient purgés une fois que la mise en miroir a démarré. Puis-je utiliser le commutateur /xd dans robocopy dans lequel je pourrais exclure les sous-répertoires de destination 

Exemple:

robocopy "\\hq04t2fis202\archive\dr" "\\hq04t3fis202\archive\dr" /mir /xd "\\hq04t3fis202\archive\dr\*\hq04s2dba301"

Dans l'exemple ci-dessus, plusieurs répertoires sous \\hq04t2fis202\archive\dr sont mis en miroir. Et à la destination, une fois que ces répertoires sont mis en miroir à partir de la source, il existe un autre script qui exporte des sous-répertoires distincts dans chacun de ces répertoires. Donc, ce que je veux faire, c'est utiliser le commutateur/xd pour éviter de purger ces sous-répertoires à la destination. En outre, dans l'exemple ci-dessus, dans le commutateur /xd, j'utilise le caractère générique "*" pour signifier que je veux inclure tous les répertoires qui se trouvent dans le dossier racine "\\hq04t3fis202\archive\dr" de la destination.

Besoin d'aide et de suggestions quant à savoir si cela est possible, et si c'est le cas, comment puis-je le faire? Jusqu'ici, j'ai essayé et testé de nombreux autres commutateurs tels que /xo, /xx, mais aucun d'entre eux ne résout mon objectif . En outre, /xx fonctionnerait, sauf que maintenant, il ne supprimera aucun dossier de la ne pas être en miroir.

Espérons que je ne suis pas trop déroutant tout le monde ici. Faites moi savoir si vous avez des questions.

17
Umang M

Lorsque j'ai essayé la solution avec/XD i, j'ai trouvé que le chemin à exclure devait être le chemin source, et non la destination.

par exemple. cela marche

robocopy c:\test\a c:\test\b /MIR /XD c:\test\a\leavethisdiralone\
23
Lars Meldgård

Plutôt que de créer des répertoires vides dans la source à exclure, vous pouvez fournir le chemin de destination complet au commutateur/XD pour que les répertoires de destination restent intacts.

robocopy "%SOURCE_PATH%" "%DEST_PATH%" /MIR /XD "%DEST_PATH%"\hq04s2dba301
5
psaxton

Pour exclure un répertoire de destination lorsque vous utilisez/mir, vous devez vous assurer que le répertoire de destination existe également sur la source. Je suis allé dans mon lecteur source et ai créé des répertoires vides portant le même nom que ceux de la destination, puis ajouté ce nom de répertoire au/xd. Il a réussi à tout mettre en miroir tout en excluant le répertoire sur la source, laissant ainsi le répertoire sur la destination avec tact. 

4
Mick Pletcher

L'ordre des arguments semble avoir de l'importance ... pour exclure les sous-répertoires, j'ai utilisé

robocopy \\source\folder C:\destinationfolder /XD * /MIR

... et cela fonctionne pour moi (copie Windows 10 de Windows Server 2016)

2
Keith Gray

Le problème est que même si nous ajoutons un dossier à ignorer, il sera supprimé s'il n'existe pas.

La solution consiste à ajouter la destination et le dossier source avec le chemin complet.

Je vais essayer d'expliquer les différents scénarios et ce qui se passe ci-dessous, en fonction de mon expérience.

Structure du dossier de départ:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt

Commande:

robocopy D:\Temp\source D:\Temp\dest /MIR

Cela copiera tous les fichiers et dossiers manquants et supprimera tous les fichiers et dossiers introuvables dans la source.

Ajoutons un nouveau dossier, puis ajoutons-le à la commande pour le sauter.

Nouvelle structure:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt
d:\Temp\source\3\3.txt

Commande:

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "D:\Temp\source\3"        

Si j'ajoute/XD avec le dossier source et que j'exécute la commande, la commande ne la copiera pas.

Maintenant, ajoutez un dossier à la destination pour obtenir cette configuration:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt
d:\Temp\source\3\3.txt

d:\Temp\dest\1.txt
d:\Temp\dest\2\2.txt
d:\Temp\dest\3\4.txt

Si j'exécute la commande, cela reste correct, 4.txt y reste. 3.txt n'est pas copié. Tout est bon.

Mais, si je supprime la source dossier "d:\Temp\source\3", le dossier de destination et le fichier sont supprimés même s'il figure dans la liste de saut

                       1    D:\Temp\source\
    *EXTRA Dir        -1    D:\Temp\dest\3\
      *EXTRA File                  4        4.txt
                       1    D:\Temp\source\2\

Si je change la commande pour ignorer le dossier de destination, le dossier n'est pas supprimé, alors qu'il est absent de la source.

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "D:\Temp\dest\3"

Par contre, si le dossier existe et qu'il existe des fichiers, il les copiera et les supprimera:

                       1    D:\Temp\source\3\
          *EXTRA File                  4        4.txt
100%        New File                   4        3.txt

Pour vous assurer que le dossier est toujours sauté et qu'aucun fichier n'est copié même si le dossier source ou de destination est manquant, nous devons les ajouter à la liste de saut:

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "d:\Temp\source\3" "D:\Temp\dest\3"

Après cela, peu importe si le dossier source est manquant ou le dossier de destination est manquant, robocopy le laissera tel quel.

0
Crick3t