Робокопія / XD не працюватиме відносними шляхами


14

Я намагаюся запустити /MOVEкоманду роботокопію, але виключаю пару підкаталогів, вказаних /XDпрапором.

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

На жаль, він ігнорує /XDваріант і все переміщує. Якщо я використовую абсолютний шлях у всьому, це працює добре, але мені це потрібно, щоб бути гнучким. Чи є якийсь спосіб змусити його працювати з відносними шляхами?


3
Слід зазначити, що ви можете перетворити відносні шляхи в абсолютні з меншими зусиллями, ніж можна було б подумати, використовуючи %CD%змінну середовища. Приклад: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
gbr

відповідь gbr має бути правильною. (за умови, що вам не потрібно ".." у відносному шляху)
Саке

Відповіді:


15

Папки, вказані для /XD, посилаються на папки (для виключення), які існують у вихідній папці, тому ви вказуєте лише ім'я папок, які ви хочете виключити, не вказуючи батьківське відношення.

тобто:

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

6
На жаль, це не працює для підкаталогів рівня 2 і вище, тобто / XD "SubDir1 / SubDir11".
шукач правди

@truthseeker - ти маєш рацію. Він працює для папок першого рівня, але нічого нижчого. Для цього вам потрібно використовувати абсолютний шлях до джерела (тобто. "/ Xd% ~ dp0CurrentDir \ Folder1 \ Subfolder1"), тоді він буде правильно ігнорувати "Subfolder1", але синхронізувати "Folder1" тощо. Ви не можете використовувати відносний шлях, і ви не можете використовувати шлях призначення.
rocketmonkeys

0

Наступне може допомогти - воно вирішує проблему відносного шляху безпосередньо, але дозволяє багато виключати каталоги та підкаталоги.

Якщо ви просто виключаєте папки верхнього рівня - просто скористайтеся назвою папки - наприклад APC. Однак якщо ви робите підпапку - вам потрібен весь шлях. Шлях повинен повністю відповідати вихідному контуру + шлях до підпапки. Я перевірив це багатьма різними способами, і це єдиний спосіб, коли мені вдалося змусити його працювати. Цей пакетний / cmd формат файлу також дозволяє виділяти пробіли у шляху або назви файлів.

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.