web-dev-qa-db-fra.com

Robocopy / XD ne fonctionnera pas avec les chemins relatifs

J'essaie d'exécuter une commande robocopy /MOVE mais d'exclure quelques sous-répertoires spécifiés avec l'indicateur /XD.

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

Malheureusement, l'option /XD est ignorée et tout est déplacé. Si j'utilise un chemin absolu sur tout, cela fonctionne bien, mais j'ai besoin que cela soit flexible. Est-il possible de le faire fonctionner avec des chemins relatifs?

11
user8783

Les dossiers spécifiés pour /XD font référence à des dossiers (à exclure) existant dans le dossier source. Vous ne devez donc spécifier que le nom du dossier à exclure, sans spécifier de relation parent.

c'est à dire:

robocopy ".\CurrentDir" ".\NewDir" /XD "SubDir1" "SubDir2" /E /MOVE
13
Ƭᴇcʜιᴇ007

Ce qui suit peut aider - il résout directement le problème du chemin relatif - mais autorise de nombreux répertoires et sous-répertoires à exclure.

Si vous n’excluez que les dossiers de niveau supérieur, utilisez simplement le nom du dossier - exemple APC. Toutefois, si vous créez un sous-dossier, vous devez connaître le chemin complet. Le chemin doit correspondre pleinement au chemin source + chemin du sous-dossier. Je l'ai testé de nombreuses façons différentes et c'est la seule façon pour moi de le faire fonctionner. Ce format de fichier batch/cmd autorise é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
0
Big John