การใช้ robocopy และการแยกหลายไดเรกทอรี


60

ฉันพยายามที่จะคัดลอกบางไดเรกทอรีจากเซิร์ฟเวอร์ก่อนที่ฉันจะคืนค่าจากการสำรองข้อมูล (การสำรองข้อมูลล่าสุดของฉันเสียหายดังนั้นฉันจึงต้องใช้รุ่นเก่า :() ฉันอยู่ในสภาพแวดล้อมการกู้คืนของ Windows และเข้าถึงไฟล์ของเซิร์ฟเวอร์ ระบบG:\และสื่อสำรองข้อมูลของฉันC:\. แต่ตั้งแต่ฉันคุ้นเคยกับลินุกซ์, ฉันมีบิตของปัญหาเกี่ยวกับบรรทัดคำสั่งใน Windows robocopyโดยเฉพาะ

ฉันต้องการคัดลอกหลายไดเรกทอรี (ดูแลโครงสร้างไดเรกทอรีเดียวกัน) จาก G: \ ถึง C: \ ในขณะที่ไม่รวมไดเรกทอรีอื่น ๆ (เช่นโฟลเดอร์ Windows และ Program Files) ฉันไม่สามารถหาไวยากรณ์สำหรับ/XDตัวเลือกได้ ฉันหวังว่าจะทำสิ่งที่ชอบ:

robocopy G: C:\backup /CREATE /XD "dir1","dir2", ...

หมายเหตุ:ฉันต้องการชี้แจงว่าฉันต้องการคัดลอกไฟล์จริงในขณะที่ดูแลโครงสร้างไดเรกทอรีด้วย ฉันเพิ่งตรวจสอบและ/createสร้างไฟล์เปล่าเท่านั้น แปลก.

คำตอบ:


90

ฉันคิดออกด้วยการทดลองและข้อผิดพลาดเล็กน้อยและ/L(เพื่อทดสอบคำสั่งก่อนที่จะทำจริง) คำสั่งที่ฉันลงท้ายด้วยคือ:

robocopy G: C:\backup /MIR /XD G:\dir1 "G:\dir 2" G:\dir3 ...

เห็นได้ชัดว่าการรวมเครื่องหมายสแลชต่อท้ายทำให้ robocopy ไม่สามารถแยกรายการไดเรกทอรีได้อย่างถูกต้องดังนั้นอย่ารวมสแลชต่อท้ายชื่อไดเรกทอรีและอย่าลืมใส่เครื่องหมายคำพูดรอบไดเรกทอรีที่มีช่องว่างในชื่อ

/MIRตัวเลือกรักษาโครงสร้างไดเรกทอรีเดียวกันขณะที่คัดลอกไฟล์

แก้ไข:หลังจากการวิจัยเพิ่มเติมฉันปรับปรุงคำสั่งเล็กน้อย:

robocopy G: C:\backup /MIR /Z /LOG:C:\todaysdate-backup.log /XF *.iso *.log *.au /XD G:\dir1 ...

ส่วนเพิ่มเติมมีดังนี้:

  • /Z อนุญาตให้งานเริ่มต้นใหม่
  • /LOG:<logfile path> ค่อนข้างอธิบายตนเอง
  • /XF กำลังถูกใช้เพื่อยกเว้นประเภทไฟล์บางประเภทดังนั้นจึงใช้เวลาไม่นาน

1
คุณสามารถใช้/?สวิตช์เพื่อรับข้อมูลความช่วยเหลือสำหรับคำสั่งคอนโซล Windows ได้ตลอดเวลา นอกจากนี้ยังมีhelpคำสั่งซึ่งคล้ายกับmanโปรแกรมของ Linux แต่ฉันไม่เคยเห็นมันใช้โดยโปรแกรมของบุคคลที่สาม (อาจเป็นได้ - ฉันไม่คุ้นเคยกับวิธีการทำงานหรือถ้าเป็นไปได้)
Ben Richards

เฮ้ขอบคุณสำหรับความคิดเห็น ฉันคิดว่ามีhelpคำสั่ง แต่ดูเหมือนจะไม่สามารถใช้งานได้ใน Windows Recovery Environment (ฉันได้รับข้อผิดพลาดเช่น "ไม่พบคำสั่ง 'ช่วย' พบ) Robocopy เป็นคำสั่งเริ่มต้นของ windows ที่แทนที่ xcopy และไม่ใช่บุคคลที่สาม
GorrillaMcD

1
ฉันรู้ว่ามันเป็นคำสั่งของ Windows และไม่ใช่บุคคลที่สาม ฉันเพิ่งจะใส่ลงไปในนั้นเพื่อการอ้างอิงในอนาคตเนื่องจากคุณบอกว่าคุณไม่คุ้นเคยกับสภาพแวดล้อมคำสั่งของ Windows :)
Ben Richards

2
clarification: /MIR(มิร์เรอร์ A ถึง B) ทำลายไฟล์ใด ๆ ใน B ที่ไม่ได้อยู่ใน A ซึ่งมีประโยชน์เมื่อไดเรกทอรีที่คุณคัดลอกไปมีอยู่แล้วและคุณต้องการให้เวอร์ชันใหม่ (ของ B) เป็นสำเนาที่แน่นอนของ A (ตามที่มีอยู่ในปัจจุบัน)
SherylHohman

4

ฉันรู้ว่านี่ไม่ได้ตอบคำถามของ OP แต่สำหรับทุกคนที่นี่จาก google: XD จะล้มเหลวในไฟล์งานหากคุณใช้เครื่องหมายคำพูด

แย่:

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        "Temporary Internet Files"

ดี:

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        Temporary Internet Files

วางการยกเว้นได้มากเท่าที่คุณต้องการบรรทัดต่อบรรทัดโดยไม่ต้องใช้เครื่องหมายคำพูด (ไม่ว่าจะมีช่องว่างหรือไม่ก็ตาม)

วิธีที่ฉันค้นพบสิ่งนี้คือการใช้สวิตช์บรรทัดคำสั่ง / SAVE: myjobname ซึ่งเอาเครื่องหมายคำพูดออกจากไดเรกทอรีที่ยกมาของฉัน!


4

คุณต้องทำซ้ำ/XDส่วน

C:\>robocopy "C:\Users\weberjn\Google Drive" "u:\Google Drive" /e /dcopy:t /copy:DT /r:0 /XD "C:\Users\weberjn\Google Drive\photos" /XD "C:\Users\weberjn\Google Drive\Google Photos"

1

วิธีแก้ปัญหาของฉันคือสร้างไฟล์. txt ที่มีไฟล์หรือไดเรกทอรีที่ฉันต้องการรวมหรือแยก ฉันมีไฟล์เหล่านี้ในโฟลเดอร์ย่อย "rcXcludes" ใต้โฟลเดอร์ "Backup" ของฉัน วิธีการตั้งชื่อไฟล์ของฉันมีดังนี้ ฉันนำหน้าพวกเขาด้วย "rc" (สำหรับ robocopy) จากนั้นมีสัญกรณ์ที่เป็นที่รู้จักสำหรับแอปพลิเคชันหรือบางส่วนของระบบไฟล์ในคำสั่ง robocopy จากนั้นผนวก "B" หรือ "R" (สำหรับ Backup หรือ Restore) จากนั้น "I" หรือ "X" (สำหรับรวมหรือไม่รวม) จากนั้นตามด้วย "D" หรือ "F" (สำหรับไดเรกทอรีหรือไฟล์) ฉันล้อมแต่ละรายการด้วยเครื่องหมายคำพูดคู่และเว้นวรรคระหว่างรายการ ไฟล์ "รวม" สามารถมีไฟล์หรือไดเรกทอรี แต่ไดเรกทอรีจะต้องมีแบ็กสแลชต่อท้าย ในไฟล์ "ยกเว้น" สำหรับไดเรกทอรีคุณไม่ได้ใช้แบ็กสแลชต่อท้าย รายการไดเร็กทอรีใด ๆ ที่สัมพันธ์กับพา ธ ต้นทางในคำสั่ง robocopy เนื้อหาทั้งหมดของไฟล์. txt เหล่านี้ต้องอยู่ในหนึ่งบรรทัดและไม่มี carraige feed line return ในแบตช์ไฟล์ของฉันฉันใช้คำสั่ง SET / P เพื่อนำเข้าไฟล์. txt ไปยังตัวแปร ฉันใช้ตัวแปรเหล่านี้สำหรับไฟล์หรือหลัง / XF หรือ / XD ตัวอย่างเช่นในการสำรองข้อมูลโปรไฟล์ Chrome ของผู้ใช้ปัจจุบันโดยไม่ต้องคัดลอกโฟลเดอร์ "ค่าเริ่มต้น" ทั้งหมดฉันใช้สิ่งต่อไปนี้

rcChromeBIF.txt  
"Bookmarks" "Custom Dictionary.txt" "Extension Cookies" "Favicons" "History" "Login Data" "Preferences" "Top Sites" "Visited Links" "Web Data" "Databases\" "Extensions\" "Local Storage\" "Plugin Data\" "User Scripts\" "User StyleSheets\"

rcChromeBXF.txt  
"Bookmarks.bak" "ChromeDWriteFontCache" "Cookies" "Cookies-journal" "Current Session" "Current Tabs" "Extension Cookies-journal" "Favicons-journal" "Google Profile.ico" "History Provider Cache" "History-journal" "Last Session" "Last Tabs" "Login Data-journal" "Network Action Predictor" "Network Action Predictor-journal" "Network Persistent State" "Origin Bound Certs" "Origin Bound Certs-journal" "QuotaManager" "QuotaManager-journal" "README" "Secure Preferences" "Shortcuts" "Shortcuts-journal" "Top Sites-journal" "TransportSecurity" "Web Data-journal"

rcChromeBXD.txt  
"Application Cache" "Cache" "data_reduction_proxy_leveldb" "Extension State" "File System" "GPUCache" "IndexedDB" "JumpListIcons" "JumpListIconsOld" "Local Extension Settings" "Media Cache" "Pepper Data" "Platform Notifications" "Service Worker" "Session Storage" "Storage" "Thumbnails" "Web Applications"

ในไฟล์ bat ในให้พูด C: \ Backup

REM ChromeBak.bat
SET chromeprofdir=Google\Chrome\User Data\Default
SET /P rcChrmBIF=<C:\Backup\rcXcludes\rcChromeBIF.txt
SET /P rcChrmBXF=<C:\Backup\rcXcludes\rcChromeBXF.txt
SET /P rcChrmBXD=<C:\Backup\rcXcludes\rcChromeBXD.txt
robocopy "%LOCALAPPDATA%\%chromeprofdir%" "H:\ChromeBackup\%chromeprofdir%" %rcChrmBIF% /E /ZB /COPY:DAT /DCOPY:T /MT:4 /XJ /XF %rcChrmBXF% /XD %rcChrmBXD% /R:10 /W:2 /TBD /NP /V /TS /Log+:"H:\ChromeBackup\ChromeBackup.log"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.