Robocopy / XD no funcionará con rutas relativas

13

Estoy tratando de ejecutar un /MOVEcomando robocopy pero excluyo un par de subdirectorios especificados con la /XDbandera.

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

Desafortunadamente, ignora la /XDopción y mueve todo. Si uso una ruta absoluta en todo, funciona bien, pero necesito que sea flexible. ¿Hay alguna manera de hacerlo funcionar con rutas relativas?

user8783
fuente
3
Cabe señalar que puede convertir las rutas relativas en rutas absolutas con menos esfuerzo de lo que uno podría pensar, utilizando la %CD%variable de entorno. Ejemplo: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
GBR
gbr answer debe ser la respuesta correcta. (dado que no necesita ".." en la ruta relativa)
Sake

Respuestas:

14

Las carpetas especificadas /XDse refieren a carpetas (para excluir) que existen dentro de la carpeta de origen, por lo que solo debe especificar los nombres de carpeta que desea excluir, sin especificar una relación principal.

es decir:

robocopy ".\CurrentDir" ".\NewDir" /XD "SubDir1" "SubDir2" /E /MOVE
Ƭᴇcʜιᴇ007
fuente
66
Desafortunadamente, esto no funciona para subdirectorios en el nivel 2 y superior, es decir / XD "SubDir1 / SubDir11".
buscador de la verdad
@truthseeker: tienes razón. Funciona para carpetas de primer nivel, pero nada más bajo. Para eso, debe usar la ruta de origen absoluta (es decir, "/ xd% ~ dp0CurrentDir \ Carpeta1 \ Subcarpeta1"), luego ignorará correctamente "Subcarpeta1" pero sincronizará "Carpeta1", etc. No puede usar la ruta relativa, y No puedes usar la ruta de destino.
rocketmonkeys
0

Lo siguiente puede ayudar: aborda directamente el problema de la ruta relativa, pero permite muchos directorios de exclusión y subdirectorios.

Si solo excluye carpetas de nivel superior, simplemente use el nombre de la carpeta, por ejemplo, APC. Sin embargo, si está haciendo una subcarpeta, necesita la ruta completa. La ruta debe coincidir completamente con la ruta de origen + ruta hacia la subcarpeta. Lo he probado de muchas maneras diferentes y esta es la única forma en que pude hacerlo funcionar. Este formato de archivo por lotes / cmd también permite espacios en la ruta o los nombres de archivo.

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
John grande
fuente