Wyłączenia katalogu wieloznacznego z robocopy - dziwny przypadek

17

Muszę pobrać robocopy, aby wykluczyć każdy plik, którego ścieżka zawiera katalog o określonej nazwie. Na przykład „pasek”:

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

należy wykluczyć, ale nie

c:\foo\barf\b.txt

Oto rzeczy, których próbowałem - z których każda została odrzucona przez robocopy:

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

Jakieś pomysły?

Jesse
źródło

Odpowiedzi:

19

Okazuje dopasowanie / XD w nazwie katalogu - nie pełna ścieżka. Więc nie musisz się martwić dopasowaniem odwrotnych ukośników.

Aby wykluczyć katalogi (w dowolnym miejscu na ścieżce) zwane „paskiem”, zadziała prosty pasek / XD . Jeśli chciał , aby wykluczyć „barf” też można użyć / bar XD *.

Czasami odpowiedź jest prostsza niż myślisz.

Jesse
źródło
4

Częścią niepowodzenia jest użycie znaku końca \ w Robocopy w odniesieniu do katalogu - co jest nie-nie - ponieważ Robocopy próbuje interpretować go jako znak ucieczki. Prawie każdy popełnia ten błąd w ten czy inny sposób z Robocopy. Mając to na uwadze, ten przykład będzie działał:

/XD "\Bar"

Jeśli chcesz dopasować bardziej szczegółową strukturę folderów (aby nie pasować do innych podfolderów, możesz dodać więcej szczegółów, takich jak:

/XD "\Foo\Bar"
/XD "C:\Foo\Bar"
Micheal Espinola
źródło
2
Wyłączenia symboli wieloznacznych nie działają. Robocopy wyrzuci błąd, jeśli spróbujesz. Czy przetestowałeś swoje przykłady?
user1751825
Zrobiłem to i używam, z wyjątkiem tego, że błędnie dodałem gwiazdkę do mojego przykładu, dla którego myślę, że mylę składnię z przełącznikiem / XF. Poprawiłem swoją odpowiedź. Dzięki.
Micheal Espinola,
1

Jeśli próbujesz użyć różnych filtrów katalogów, pamiętaj o usunięciu folderu docelowego między zmianami!

Dla mnie problemem było to, że nie zdawałem sobie sprawy, że przełącznik ignorowania katalogu jest również stosowany do folderów docelowych. Uruchomiłem robocopy /MIRi zmieniłem katalog źródłowy, a mój katalog docelowy został zaktualizowany zgodnie z oczekiwaniami. Potem zauważyłem, że mam foldery archiwów, których nie chciałem, więc dodałem /XD archive, ale w folderze docelowym nadal były foldery archiwów!

Po zadziałaniu ze znakami wieloznacznymi i włączeniem / wyłączeniem \s, w końcu spróbowałem usunąć folder docelowy i ponownie uruchomić skrypt - tym razem nie miał folderów archiwum! Oto polecenie, które uruchomiłem, ze zmienionymi nazwami katalogów, aby chronić niewinnych:

robocopy \\SERVER\Some\Folder\Path .\Some\Relative\Path /Copy:DAT /Mir /R:0 /W:1 /XD archive*
tehDorf
źródło
0

Przykro mi, ale zgodnie z dokumentacją pod adresem https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy :

/ xf <nazwa_pliku> [...] Wyklucza pliki, które pasują do podanych nazw lub ścieżek. Pamiętaj, że nazwa_pliku może zawierać znaki wieloznaczne (* i?).
/ xd <Directory> [...] Wyklucza katalogi pasujące do podanych nazw i ścieżek.

Oznacza to w szczególności, że symbol wieloznaczny może być używany w flagi / xf, ale nie w flagi / xd.

Piotr
źródło