Robocopy / XD จะไม่ทำงานกับเส้นทางสัมพัทธ์


11

ฉันกำลังพยายามรัน/MOVEคำสั่งrobocopy แต่ไม่รวมไดเร็กทอรีย่อยสองรายการที่ระบุด้วย/XDแฟล็ก

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

น่าเสียดายที่มันไม่สนใจ/XDตัวเลือกและย้ายทุกอย่าง ถ้าฉันใช้เส้นทางที่สมบูรณ์ในทุกสิ่งมันก็ใช้ได้ดี แต่ฉันต้องการให้มันยืดหยุ่น มีวิธีใดที่จะทำให้มันใช้งานได้กับเส้นทางที่สัมพันธ์กัน?


2
ควรสังเกตว่าคุณสามารถเปลี่ยนเส้นทางสัมพัทธ์เป็นเส้นทางที่แน่นอนโดยใช้ความพยายามน้อยกว่าที่คิดโดยใช้%CD%ตัวแปรสภาพแวดล้อม ตัวอย่าง: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
gbr

คำตอบ gbr ควรเป็นคำตอบที่ถูกต้อง (เนื่องจากคุณไม่ต้องการ ".. " ในเส้นทางญาติ)
สาเก

คำตอบ:


13

โฟลเดอร์ที่ระบุไว้/XDอ้างถึงโฟลเดอร์ (เพื่อแยก) ที่มีอยู่ในโฟลเดอร์ต้นทางดังนั้นคุณจะระบุชื่อโฟลเดอร์ที่คุณต้องการยกเว้นเท่านั้นโดยไม่ต้องระบุความสัมพันธ์หลัก

เช่น:

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

6
โชคไม่ดีที่มันไม่ทำงานสำหรับไดเรกทอรีย่อยในระดับ 2 และสูงกว่าเช่น / XD "SubDir1 / SubDir11"
facteeker

@truthseeker - คุณพูดถูก มันใช้งานได้กับโฟลเดอร์ระดับที่ 1 แต่ไม่มีอะไรที่ต่ำกว่า เพื่อที่คุณจะต้องใช้เส้นทางที่มาแน่นอน (เช่น. "/ xd% ~ dp0CurrentDir \ Folder1 \ Subfolder1") จากนั้นจะละเว้น "Subfolder1" แต่ซิงค์ "Folder1" ฯลฯ อย่างถูกต้องคุณไม่สามารถใช้เส้นทางสัมพัทธ์และ คุณไม่สามารถใช้เส้นทางปลายทาง
rocketmonkeys

0

ต่อไปนี้อาจช่วยได้ - มันแก้ไขปัญหาเส้นทางสัมพัทธ์โดยตรง - แต่อนุญาตสำหรับไดเรกทอรีที่ไม่รวมจำนวนมากและไดเรกทอรีย่อย

หากคุณไม่รวมโฟลเดอร์ระดับบนสุด - เพียงใช้ชื่อโฟลเดอร์ - ตัวอย่าง APC อย่างไรก็ตามหากคุณกำลังทำโฟลเดอร์ย่อย - คุณต้องมีเส้นทางทั้งหมด พา ธ ต้องตรงกับพา ธ ต้นทาง + พา ธ ทั้งหมดไปที่โฟลเดอร์ย่อย ฉันทดสอบมันหลายวิธีและนี่เป็นวิธีเดียวที่ฉันสามารถใช้งานได้ รูปแบบไฟล์ batch / 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.