Robocopy / XD ne fonctionnera pas avec des chemins relatifs

13

J'essaie d'exécuter une /MOVEcommande robocopy, mais j'exclus quelques sous-répertoires spécifiés avec l' /XDindicateur.

robocopy ".\CurrentDir" ".\NewDir" /XD ".\CurrentDir\SubDir1" ".\CurrentDir\SubDir2" /E /MOVE

Malheureusement, il ignore l' /XDoption et déplace tout. Si j'utilise un chemin absolu sur tout, cela fonctionne bien, mais j'ai besoin de cela pour être flexible. Existe-t-il un moyen de le faire fonctionner avec des chemins relatifs?

user8783
la source
3
Il convient de noter que vous pouvez transformer des chemins relatifs en chemins absolus avec moins d'efforts qu'on ne le pense, en utilisant la %CD%variable d'environnement. Exemple: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
gbr
La réponse gbr doit être la bonne réponse. (étant donné que vous n'avez pas besoin de ".." dans le chemin relatif)
Sake

Réponses:

14

Les dossiers spécifiés pour /XDfont référence aux dossiers (à exclure) qui existent dans le dossier source, vous ne spécifiez donc que le ou les noms de dossier que vous souhaitez exclure, sans spécifier de relation parent.

c'est à dire:

robocopy ".\CurrentDir" ".\NewDir" /XD "SubDir1" "SubDir2" /E /MOVE
Ƭᴇcʜιᴇ007
la source
6
Malheureusement, cela ne fonctionne pas pour les sous-répertoires de niveau 2 et supérieur, c'est-à-dire / XD "SubDir1 / SubDir11".
consulter la vérité
@truthseeker - vous avez raison. Cela fonctionne pour les dossiers de 1er niveau, mais rien de moins. Pour cela, vous devez utiliser le chemin source absolu (c'est-à-dire "/ xd% ~ dp0CurrentDir \ Folder1 \ Subfolder1"), puis il ignorera correctement "Subfolder1" mais synchronisera "Folder1" etc. Vous ne pouvez pas utiliser de chemin relatif, et vous ne pouvez pas utiliser le chemin de destination.
rocketmonkeys
0

Ce qui suit peut aider - il résout directement le problème de chemin d'accès relatif - mais permet de nombreux répertoires et sous-répertoires d'exclusion.

Si vous excluez simplement les dossiers de niveau supérieur - utilisez simplement le nom du dossier - exemple APC. Cependant, si vous créez un sous-dossier - vous avez besoin du chemin complet. Le chemin doit correspondre entièrement au chemin source + chemin vers le sous-dossier. Je l'ai testé de nombreuses manières différentes et c'est la seule façon dont j'ai pu le faire fonctionner. Ce format de fichier batch / cmd permet également des espaces dans les noms de chemin ou de fichier.

setlocal
set Source_path="\\usatlvmpdroadm1\C$\Installs"
set Destination_path="C:\Robo"
set Log_Path_and_File="C:\RoboCopy_Log_Files\01-Installs C drive to Robo C drive.txt"
set ED1="APC"
set ED2="\\usatlvmpdroadm1\C$\Installs\Dell\Dell MD3420 Firmware"

robocopy.exe %Source_path% %Destination_path% /COPYALL /ZB /MIR /MT:128 /DCOPY:T /XA:SH /XD %ED1% /XD %ED2% /XJ /XJD /R:2 /W:1 /NDL /NP /TEE /LOG:%Log_Path_and_File%

endlocal
Big John
la source