11

Я пытаюсь запустить команду robocopy /MOVE но исключаю пару подкаталогов, указанных с флагом /XD .

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

К сожалению, он игнорирует параметр /XD и перемещает все. Если я использую абсолютный путь для всего, он работает нормально, но мне нужно, чтобы он был гибким. Есть ли способ заставить его работать с относительными путями?

2 ответа2

13

Папки, указанные для /XD , относятся к папкам (исключая), которые существуют в исходной папке, поэтому вы указываете только те имена папок, которые хотите исключить, без указания родительского отношения.

то есть:

robocopy ".\CurrentDir" ".\NewDir" /XD "SubDir1" "SubDir2" /E /MOVE
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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .