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?
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
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