Robocopy / XD nie będzie działać ze ścieżkami względnymi

14

Próbuję uruchomić /MOVEpolecenie robocopy, ale wykluczę kilka podkatalogów określonych z /XDflagą.

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

Niestety ignoruje tę /XDopcję i przenosi wszystko. Jeśli użyję bezwzględnej ścieżki do wszystkiego, wszystko działa dobrze, ale potrzebuję, aby była elastyczna. Czy jest jakiś sposób, aby działał ze ścieżkami względnymi?

użytkownik8783
źródło
3
Należy zauważyć, że można zamienić ścieżki względne na bezwzględne przy mniejszym wysiłku, niż mogłoby się wydawać, za pomocą %CD%zmiennej środowiskowej. Przykład: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
gbr
Odpowiedź gbr powinna być poprawną odpowiedzią. (pod warunkiem, że nie potrzebujesz „..” na ścieżce względnej)
Sake

Odpowiedzi:

15

Określone foldery /XDodnoszą się do folderów (do wykluczenia), które istnieją w folderze źródłowym, więc określasz tylko nazwy folderów, które chcesz wykluczyć, bez określania relacji nadrzędnej.

to znaczy:

robocopy ".\CurrentDir" ".\NewDir" /XD "SubDir1" "SubDir2" /E /MOVE
Ƭᴇcʜιᴇ007
źródło
6
Niestety nie działa to w przypadku podkatalogów na poziomie 2 i wyższym, tj. / XD „SubDir1 / SubDir11”.
poszukiwacz prawdy
@truthseeker - masz rację. Działa dla folderów pierwszego poziomu, ale nic niższego. W tym celu należy użyć bezwzględnej ścieżki źródłowej (tj. „/ Xd% ~ dp0CurrentDir \ Folder1 \ Subfolder1”), a następnie poprawnie zignoruje „Subfolder1”, ale zsynchronizuje „Folder1” itp. Nie można użyć ścieżki względnej, a nie możesz użyć ścieżki docelowej.
rocketmonkeys
0

Poniższe informacje mogą pomóc - rozwiązują bezpośrednio problem ścieżki względnej - ale pozwalają na wykluczenie wielu katalogów i podkatalogów.

Jeśli wykluczasz tylko foldery najwyższego poziomu - użyj nazwy folderu - na przykład APC. Jednak jeśli robisz podfolder - potrzebujesz całej ścieżki. Ścieżka musi w pełni pasować do ścieżki źródłowej + ścieżki do podfolderu. Przetestowałem to na wiele różnych sposobów i tylko w ten sposób udało mi się go uruchomić. Ten format pliku wsadowego / cmd dopuszcza również spacje w ścieżce lub nazwach plików.

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
źródło