Wildcard-Verzeichnisausschlüsse mit Robocopy - seltsamer Fall

16

Ich muss eine Robokopie erstellen, um alle Dateien auszuschließen, deren Pfad ein Verzeichnis mit einem bestimmten Namen enthält. Zum Beispiel "bar":

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

sollte ausgeschlossen werden, aber nicht

c:\foo\barf\b.txt

Hier sind die Dinge, die ich ausprobiert habe - von denen jede von Robocopy abgelehnt wurde:

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

Irgendwelche Ideen?

Jesse
quelle

Antworten:

18

Es stellt sich heraus, dass / XD mit dem Verzeichnisnamen übereinstimmt - nicht mit dem vollständigen Pfad. Sie müssen sich also keine Gedanken darüber machen, wie die Backslashes zusammenpassen.

Um Verzeichnisse (irgendwo im Pfad) auszuschließen, die als "bar" bezeichnet werden, funktioniert eine einfache / XD-Leiste . Wenn Sie auch "barf" ausschließen möchten, können Sie / XD bar * verwenden.

Manchmal ist die Antwort einfacher als Sie denken.

Jesse
quelle
4

Ein Teil des Fehlers ist die Verwendung eines nachgestellten \ in Robocopy, wenn auf ein Verzeichnis verwiesen wird, bei dem es sich um ein No-No handelt, da Robocopy versucht, es als Escape-Zeichen zu interpretieren. Fast jeder macht diesen Fehler auf die eine oder andere Weise mit Robocopy. In diesem Sinne wird dieses Beispiel funktionieren:

/XD "\Bar"

Wenn Sie eine spezifischere Ordnerstruktur abgleichen möchten (um nicht mit anderen Unterordnern übereinzustimmen), können Sie weitere Details hinzufügen, z.

/XD "\Foo\Bar"
/XD "C:\Foo\Bar"
Micheal Espinola
quelle
2
Platzhalterausschlüsse funktionieren nicht. Robocopy gibt einen Fehler aus, wenn Sie es versuchen. Hast du deine Beispiele getestet?
user1751825
Ich habe und benutze es, bis auf die Tatsache, dass ich meinem Beispiel fälschlicherweise einen Stern hinzugefügt habe, für den ich denke, dass ich die Syntax mit der Option / XF verwechsle. Ich habe meine Antwort korrigiert. Vielen Dank.
Micheal Espinola
1

Wenn Sie verschiedene Verzeichnisfilter ausprobieren, müssen Sie den Zielordner zwischen den Änderungen löschen!

Ein Problem für mich war, dass ich nicht realisiert habe, dass der Verzeichniswechsel zum Ignorieren auch auf die Zielordner angewendet wird. Ich habe robocopy mit ausgeführt /MIRund das Quellverzeichnis geändert, und mein Zielverzeichnis wurde wie erwartet aktualisiert. Dann bemerkte ich, dass ich Archivordner hatte, die ich nicht wollte, also fügte ich hinzu /XD archive, aber mein Zielordner enthielt immer noch Archivordner!

Nachdem \ich mit Platzhaltern herumgespielt und die s eingeschlossen / ausgeschlossen hatte , habe ich endlich versucht, den Zielordner zu löschen und das Skript erneut auszuführen - diesmal fehlten die Archivordner! Hier ist der Befehl, den ich ausgeführt habe, wobei die Verzeichnisnamen geändert wurden, um die Unschuldigen zu schützen:

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

Es tut mir leid, aber gemäß der Dokumentation unter https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy :

/ xf <Dateiname> [...] Schließt Dateien aus, die den angegebenen Namen oder Pfaden entsprechen. Beachten Sie, dass FileName Platzhalterzeichen (* und?) Enthalten kann.
/ xd <Verzeichnis> [...] Schließt Verzeichnisse aus, die den angegebenen Namen und Pfaden entsprechen.

Dies bedeutet speziell, dass Platzhalter in dem Flag / xf aber nicht in dem Flag / xd verwendet werden können.

Peter
quelle