Exclusiones de directorio comodín con robocopy - caso extraño

16

Necesito obtener robocopy para excluir cualquier archivo cuya ruta contenga un directorio con un nombre en particular. Por ejemplo, "bar":

c:\foo\bar\a.txt
c:\bar\c.txt
d:\baz\bar\flub\d.txt

debe excluirse, pero no

c:\foo\barf\b.txt

Estas son las cosas que probé, cada una de las cuales fue rechazada por robocopy:

/XD \bar\
/XD *\bar\*
/XD *^\bar^\*

¿Algunas ideas?

Jesse
fuente

Respuestas:

18

Resulta las coincidencias / XD en el nombre del directorio, no en la ruta completa. Por lo tanto, no tiene que preocuparse por hacer coincidir las barras invertidas.

Entonces, para excluir directorios (en cualquier parte de la ruta) llamados "barra", funcionará una barra simple / XD . Si también desea excluir "barf", puede usar / XD bar *.

A veces la respuesta es más simple de lo que piensas.

Jesse
fuente
4

Parte de la falla es usar un \ Trailing \ en Robocopy cuando se refiere a un directorio, que es un no-no, ya que Robocopy intenta interpretarlo como un carácter de escape. Casi todos cometen este error de una forma u otra con Robocopy. Con eso en mente, este ejemplo funcionará:

/XD "\Bar"

Si desea hacer coincidir una estructura de carpetas más específica (para no coincidir con otras subcarpetas, puede agregar más detalles, como:

/XD "\Foo\Bar"
/XD "C:\Foo\Bar"
Micheal Espinola
fuente
2
Las exclusiones de comodines no funcionan. Robocopy arrojará un error si lo intentas. ¿Probaste tus ejemplos?
user1751825
Lo hice y lo uso, excepto por el hecho de que agregué por error un asterisco a mi ejemplo, por lo que creo que confundo la sintaxis con el modificador / XF. He corregido mi respuesta. Gracias.
Micheal Espinola
1

Si está probando diferentes filtros de directorio, asegúrese de borrar su carpeta de destino entre cambios.

Un problema para mí fue que no me di cuenta de que el cambio de directorio de ignorar también se aplica a las carpetas de destino. Ejecuté robocopy con /MIRy cambié el directorio de origen, y mi directorio de destino se actualizó como se esperaba. Entonces noté que tenía carpetas de archivo que no quería, así que agregué /XD archive, ¡pero mi carpeta de destino todavía tenía carpetas de archivo!

Después de jugar con comodines e incluir / excluir los \s, finalmente intenté eliminar la carpeta de destino y volver a ejecutar el script, ¡esta vez no tenía las carpetas de archivo! Aquí está el comando que estaba ejecutando, con los nombres de directorio cambiados para proteger a los inocentes:

robocopy \\SERVER\Some\Folder\Path .\Some\Relative\Path /Copy:DAT /Mir /R:0 /W:1 /XD archive*
tehDorf
fuente
0

Lo siento, pero de acuerdo con la documentación en https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy :

/ xf <Nombre de archivo> [...] Excluye archivos que coinciden con los nombres o rutas especificados. Tenga en cuenta que FileName puede incluir caracteres comodín (* y?).
/ xd <Directory> [...] Excluye directorios que coinciden con los nombres y rutas especificados.

Entonces, esto significa específicamente que el comodín se puede usar en el indicador / xf pero no en el indicador / xd.

Peter
fuente