Robocopy / XD funktioniert nicht mit relativen Pfaden

13

Ich versuche, einen Robocopy- /MOVEBefehl auszuführen , schließe jedoch einige mit dem /XDFlag angegebene Unterverzeichnisse aus .

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

Leider ignoriert es die /XDOption und verschiebt alles. Wenn ich für alles einen absoluten Pfad verwende, funktioniert das einwandfrei, aber ich brauche diesen, um flexibel zu sein. Gibt es eine Möglichkeit, es mit relativen Pfaden zum Laufen zu bringen?

user8783
quelle
3
Es sollte beachtet werden, dass Sie relative Pfade mit weniger Aufwand als gedacht in absolute Pfade umwandeln können, indem Sie die %CD%Umgebungsvariable verwenden. Beispiel: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
gbr
gbr Antwort sollte die richtige Antwort sein. (vorausgesetzt, Sie brauchen nicht ".." im relativen Pfad)
Sake

Antworten:

14

Die angegebenen Ordner /XDbeziehen sich auf Ordner (zum Ausschließen), die im Quellordner vorhanden sind. Sie geben also nur die Ordnernamen an, die Sie ausschließen möchten, ohne eine übergeordnete Beziehung anzugeben.

dh:

robocopy ".\CurrentDir" ".\NewDir" /XD "SubDir1" "SubDir2" /E /MOVE
Ƭᴇcʜιᴇ007
quelle
6
Leider funktioniert dies nicht für Unterverzeichnisse in Level 2 und höher, dh / XD "SubDir1 / SubDir11".
Wahrheitssucher
@ Wahrheitssucher - du hast recht. Es funktioniert für Ordner der ersten Ebene, aber nichts niedrigeres. Dafür müssen Sie den absoluten Quellpfad verwenden (z. B. "/ xd% ~ dp0CurrentDir \ Folder1 \ Subfolder1"), dann wird "Subfolder1" ordnungsgemäß ignoriert, aber "Folder1" usw. synchronisiert. Sie können den relativen Pfad und nicht verwenden Sie können den Zielpfad nicht verwenden.
Raketenmonkeys
0

Das Folgende kann hilfreich sein - es behebt das Problem mit dem relativen Pfad direkt -, lässt jedoch viele Ausschlussverzeichnisse und Unterverzeichnisse zu.

Wenn Sie nur Ordner der obersten Ebene ausschließen möchten, verwenden Sie einfach den Ordnernamen - Beispiel APC. Wenn Sie jedoch einen Unterordner erstellen, benötigen Sie den gesamten Pfad. Der Pfad muss vollständig mit dem Quellpfad + Pfad bis zum Unterordner übereinstimmen. Ich habe es auf viele verschiedene Arten getestet und nur so konnte ich es zum Laufen bringen. Dieses Batch- / Cmd-Dateiformat ermöglicht auch Leerzeichen im Pfad oder in den Dateinamen.

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
Big John
quelle