Esclusioni di directory jolly con robocopy - caso strano


16

Ho bisogno di ottenere robocopy per escludere qualsiasi file il cui percorso contiene una directory con un nome particolare. Ad esempio, "bar":

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

dovrebbe essere escluso, ma non

c:\foo\barf\b.txt

Ecco le cose che ho provato - ognuna delle quali è stata respinta da robocopy:

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

Qualche idea?

Risposte:


18

Risulta le corrispondenze / XD sul nome della directory, non sul percorso completo. Quindi in realtà non devi preoccuparti di abbinare le barre rovesciate.

Quindi per escludere le directory (ovunque nel percorso) chiamate "bar", funzionerà una barra semplice / XD . Se anche tu volessi escludere "barf", potresti usare / XD bar *.

A volte la risposta è più semplice di quanto pensi.


4

Parte dell'errore sta usando un trailing \ in Robocopy quando si fa riferimento a una directory - che è un no-no - poiché Robocopy cerca di interpretarlo come un carattere di escape. Quasi tutti commettono questo errore in un modo o nell'altro con Robocopy. Con questo in mente, questo esempio funzionerà:

/XD "\Bar"

Se si desidera abbinare una struttura di cartelle più specifica (in modo da non corrispondere ad altre sottocartelle, è possibile aggiungere ulteriori dettagli, come:

/XD "\Foo\Bar"
/XD "C:\Foo\Bar"

2
Le esclusioni di caratteri jolly non funzionano. Robocopy genererà un errore se ci provi. Hai provato i tuoi esempi?
user1751825,

L'ho fatto e lo uso, tranne per il fatto che ho erroneamente aggiunto un asterisco al mio esempio, per il quale penso di confondere la sintassi con l'opzione / XF. Ho corretto la mia risposta. Grazie.
Micheal Espinola,

1

Se stai provando diversi filtri di directory, assicurati di cancellare la cartella di destinazione tra le modifiche!

Un problema per me è stato che non avevo realizzato che l'opzione ignora directory viene applicata anche alle cartelle di destinazione. Avevo eseguito robocopy con /MIRe modificato la directory di origine e la directory di destinazione è stata aggiornata come previsto. Poi ho notato che avevo cartelle di archivio che non volevo, quindi ho aggiunto /XD archive, ma la mia cartella di destinazione conteneva ancora cartelle di archivio!

Dopo aver incasinato i caratteri jolly e aver incluso / escluso i messaggi di posta \elettronica, ho finalmente provato a eliminare la cartella di destinazione e rieseguire lo script - questa volta non aveva le cartelle di archivio! Ecco il comando che stavo eseguendo, con i nomi delle directory cambiati per proteggere gli innocenti:

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

0

Mi dispiace, ma secondo la documentazione su https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy :

/ xf <NomeFile> [...] Esclude i file che corrispondono ai nomi o percorsi specificati. Si noti che FileName può includere caratteri jolly (* e?).
/ xd <Directory> [...] Esclude le directory che corrispondono ai nomi e ai percorsi specificati.

Quindi, questo significa specificamente che i caratteri jolly possono essere utilizzati nel flag / xf ma non nel flag / xd.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.