คอมมานด์บรรทัดคำสั่งเพื่อคัดลอกไดเรกทอรีทั้งหมด (รวมถึงโฟลเดอร์ไดเรกทอรี) ไปยังไดเรกทอรีอื่น


68

ใช้บรรทัดคำสั่งฉันต้องการคัดลอกไดเรกทอรีหนึ่งไปยังอีก ตัวอย่างเช่นมีไดเรกทอรีและC:/testC:/test2

ฉันต้องการที่จะคัดลอกC:/testลงในC:/test2เพื่อที่ว่าผลจะเป็นC:/test2/test

ทุกอย่างที่ฉันได้พบเพื่อให้ห่างไกลเท่านั้นที่จะคัดลอกไฟล์และโฟลเดอร์ที่มีอยู่ในC:/testเข้าไปC:/test2แต่ใบออกไดเรกทอรีแม่


1
ลองใช้ xcopy

คำตอบ:


50

ลองใช้XCOPYกับ/Eสวิตช์ ข้อมูลเพิ่มเติมที่นี่

ฉันไม่ได้เข้าถึงข้อมูลนี้จากสมองของฉันในปีที่ผ่านมา !

UPDATE

เอกสารบอกว่ามันสำเนาไฟล์และไดเรกทอรีย่อยทั้งหมดจากไดเรกทอรีแหล่งที่มา (หมายถึงว่าไดเรกทอรีแม่ไม่ได้สร้างขึ้น) ดังนั้นคุณจะต้องสร้างtestในครั้งแรกและจากนั้นใช้C:\test2XCOPY


2
สวิตช์ '/ T' บน Xcopy จะทำสำเนาโครงสร้างไดเรกทอรีและไดเรกทอรีย่อยโดยไม่มีไฟล์ใด ๆ
mfg

2
ใช้ดีกว่าrobocopy /CREATE /COPYALL /DCOPY:T src dstเพื่อคัดลอกโฟลเดอร์และไฟล์ว่างเปล่า แต่เก็บการประทับเวลาและคุณลักษณะอื่น ๆ ทั้งหมด
user1016274

2
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถามเพราะโฟลเดอร์testยังคงถูกสร้าง
IGRACH

3
@IGRACH ฉันคิดว่าการmd testใช้งานxcopyนั้นชัดเจนมาก
vivin

1
มีคำถามเกี่ยวกับcopyโฟลเดอร์ที่ไม่ได้สร้างโฟลเดอร์ใหม่แล้วคัดลอกเนื้อหาในนั้น
IGRACH

35
xcopy c:\test c:\test2\test /s /e /h

นี่คือข้อมูลเกี่ยวกับ XCOPY [ 1 , 2 ]


2
จะหยุดขอให้ฉันป้อน "D" ได้อย่างไร
YumYumYum

2
@YumYumYum: คุณสามารถใช้สวิตช์ / I: "/ I หากไม่มีปลายทางและคัดลอกไฟล์มากกว่าหนึ่งไฟล์ถือว่าปลายทางนั้นต้องเป็นไดเรกทอรี"
Thijs Tijsma

18

ใช้ ROBOCOPY หากคุณกำลังสร้างสคริปต์สำรอง xcopy เลิกใช้แล้วและมีแนวโน้มว่าจะถูกเลิกใช้ในอนาคตอันใกล้ robocopy สามารถทำทุกอย่างได้ xcopy นอกจากนี้ยังยืดหยุ่นและเชื่อถือได้มากขึ้น การสร้างสคริปต์ด้วย robocopy จะเป็นการพิสูจน์ในอนาคต


  1. ใช้ robocopy เพื่อคัดลอกโฟลเดอร์อย่างง่ายดาย คำสั่ง robocopy แทนที่คำสั่ง xcopy มันสามารถคัดลอกโฟลเดอร์ทั้งหมดได้อย่างรวดเร็วโดยไม่ต้องกังวลกับการกำหนดเนื้อหา ตัวอย่างเช่นหากต้องการคัดลอกเนื้อหาทั้งหมดของไดเรกทอรี C: \ tools ไปยังโฟลเดอร์ใหม่ D: \ backup \ tools ให้ป้อนข้อมูลต่อไปนี้:

    robocopy C:\tools D:\backup\tools /e
    

    โมดิฟายเออร์ / e บอกให้ robocopy รวมไดเรกทอรีย่อยทั้งหมด รวมถึงโฟลเดอร์ที่ว่างเปล่า robocopy จะคัดลอกไฟล์ที่ซ่อนอยู่และระบบโดยอัตโนมัติ มันจะสร้างไดเรกทอรีใหม่หากไม่มีอยู่ที่ตำแหน่งเป้าหมาย

  2. ทำมิเรอร์ไดเร็กทอรี การทำมิเรอร์ไดเร็กทอรีนั้นยอดเยี่ยมสำหรับการสำรองข้อมูล ตัวเลือกมิเรอร์ของ robocopy จะคัดลอกเนื้อหาทั้งหมดจากต้นทางไปยังปลายทาง จากนั้นจะลบสิ่งที่ปลายทางที่ไม่มีอยู่ในแหล่งที่มา วิธีนี้ช่วยให้มั่นใจได้ว่าการสำรองข้อมูลของคุณมีไฟล์เวอร์ชันล่าสุดเท่านั้น ตัวอย่างเช่นในการทำมิเรอร์ C: \ Users \ My Documents เป็น D: \ backup \ My Documents ให้ป้อนข้อมูลต่อไปนี้: [4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    ฟังก์ชั่นนี้จะสงวนสิทธิ์ทั้งหมดของไฟล์ต้นฉบับ

  3. เปิดใช้งานการรีสตาร์ท คุณอาจต้องการรวมความสามารถในการรีสตาร์ทกระบวนการในกรณีที่การเชื่อมต่อถูกตัดกลางสำเนา

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. บันทึกกระบวนการคัดลอก robocopy อนุญาตให้คุณสร้างไฟล์บันทึก สิ่งนี้สามารถช่วยคุณระบุปัญหาหรือสร้างที่เก็บถาวรของสิ่งที่ถูกคัดลอก

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    กระบวนการ / log + ปรับปรุงจะผนวกไฟล์บันทึกที่มีอยู่แทนการเขียนทับมัน หากคุณต้องการเขียนทับไฟล์บันทึกเก่าให้ใช้ /log:.txt


8

ฉันแนะนำrobocopyผ่านxcopyเนื่องจากมีตัวเลือกมากมายรวมถึงการเก็บเวลาที่ไม่เป็นอันตรายซึ่งฉันพบว่าจำเป็น

Robocopy จำเป็นต้องเพิ่มใน XP / 2003 แต่เป็นมาตรฐานจาก Vista เป็นต้นไป

ที่จริงฉันมักจะใช้xxcopyแต่รุ่น 64 บิตไม่ฟรี


1
robocopyเป็นโปรแกรม Windows คำถามเกี่ยวกับ DOS
grawity

9
@ grawity: ความเป็นไปได้ของเขาที่ใช้ 16-bit DOS นั้นมีขนาดเล็กมากเมื่อเทียบกับความน่าจะเป็นสูงที่เขาเรียก CMD 'DOS' ซึ่งเป็นเรื่องธรรมดาในโลกแห่งความเป็นจริง
Paradroid

คำถามจริงคือ robocopy เป็นโปรแกรม Microsoft หรือไม่
knocte

@ knocte ใช่มันเป็น
yossico

5
XCOPY SourceDrive: DestinationDrive: /S /E

ตัวอย่างเช่นหากคุณต้องการคัดลอกE:ข้อมูลไดรฟ์ไปยังH:ไดรฟ์ (ฮาร์ดไดรฟ์ภายนอก) ผ่านบรรทัดคำสั่งหรือจากสภาพแวดล้อมคำสั่ง xboot

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E

2
/ S ไม่จำเป็นเมื่อ / มี E windows-commandline.com/copy-directory-command-line
Giri

3

หากคำถามเดิมคือสิ่งที่ฉันกำลังมองหาคำตอบแล้วฉันและเห็นได้ชัดว่าไม่มีใครข้างต้นได้มาด้วยวิธีการแก้ปัญหาที่ชัดเจน

สิ่งที่ฉันกำลังมองหาคือการคัดลอกไดเรกทอรีทดสอบไปยังไดเรกทอรี test2 โดยไม่ต้องพิมพ์ใหม่อีกครั้ง สิ่งที่ต้องการ

xcopy /isvy c:\test d:\test2

ที่d:\test2\testไม่มีอยู่ก่อนสำเนา แต่หลังจาก การทำเช่นนี้จะช่วยลดการพลาดการทดสอบครั้งที่สองในเส้นทางปลายทาง คำสั่งดังกล่าวจะคัดลอกไฟล์ทั้งหมดและไดเรกทอรีใด ๆ ลงใน test2 แต่จะไม่สร้างไดเรกทอรีทดสอบ

จนถึงตอนนี้

xcopy /isvy c:\test d:\test2\test

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

ทางเลือกอื่นในการแก้ไขสิ่งนี้คือ

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

ชุดนี้ไดเรกทอรีปลายทางในmydirตัวแปรนั้นใช้ตัวแปรนั้นทั้งในแหล่งที่มาและเส้นทางปลายทาง หากคุณพิมพ์ตัวแปรผิดคุณจะได้รับข้อผิดพลาดหรือไดเรกทอรีปลายทางอาจมี%ที่จุดเริ่มต้นและจุดสิ้นสุด

พิมพ์นานกว่า แต่มีโอกาสน้อยกว่าที่จะได้ชื่อผิด พวกเขาจะเห็นได้ชัดเจน


มันเป็นจริงที่xcopy /ievy c:\test d:\test2\testจะรักษาโครงสร้างไดเรกทอรีต้นไม้และset mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%เพียง 1 &จะพอเพียงเนื่องจากผลของการตั้งค่าที่ประสบความสำเร็จเสมอ
NetwOrchestration

0
xcopy SWITCHES SOURCE DESTINATION

จะอยู่ที่ไหนSWITCHES:

  • ในการคัดลอกโครงสร้างไดเรกทอรีทั้งหมด:

    /hiev

  • หากต้องการเขียนทับไฟล์ในปลายทาง (ในกรณีที่มีโฟลเดอร์ปลายทางอยู่แล้ว):

    /hievry

  • หากต้องการเขียนทับและคัดลอกด้วย ACL + คุณสมบัติ:

    /hievxok

เหมาะที่สุดสำหรับกรณีของคุณ:

xcopy /hievry C:\test C:\test2\test


0

ฉันมีสถานการณ์ที่คล้ายกันซึ่งฉันต้องการคัดลอกจำนวนโฟลเดอร์รวมถึงชื่อโฟลเดอร์ไปยังตำแหน่งปลายทางและหวังว่าคำถามนี้ตอบว่าการทำเครื่องหมายจะช่วยได้ แต่ก็ไม่ได้จริงๆ

ประการแรกมีบางครั้งที่ฉันต้องการความสามารถนี้และฉันพบเจอเมื่อฉันต้องคัดลอกโฟลเดอร์จาก C: \ Windows \ Assembly \ GAC_MSIL Windows Explorer ปฏิเสธที่จะแสดงโฟลเดอร์นี้ดังนั้นคุณต้องใช้พรอมต์คำสั่ง

หากคุณคุ้นเคยกับโฟลเดอร์ GAC คุณจะรู้ว่าชื่อโฟลเดอร์นั้นไม่ยุ่งยากและง่ายต่อการเข้าใจผิดถ้าคุณพิมพ์ผิด

ดังนั้นการสร้างไดเร็กตอรี่ล่วงหน้าไม่ใช่ตัวเลือกจริงๆ - เว้นแต่คุณจะใช้สคริปต์ - ซึ่งฉันใช้ท้ายที่สุด, เพราะนี่เป็นทางออกเดียวที่แท้จริง

ก่อนอื่นให้ทำการคัดลอกโฟลเดอร์ที่คุณต้องการคัดลอกไปยังไฟล์ชั่วคราวซึ่งโดยทั่วไปจะขึ้นอยู่กับรูปแบบบางอย่างเช่น

dir /B policy* > Folders.txt

จากนั้นวนรอบรายการในการถ่ายโอนข้อมูลและคัดลอกไปยังปลายทาง Xcopy จะดูแลการสร้างโฟลเดอร์ถ้าคุณจบอาร์กิวเมนต์ปลายทางด้วยแบ็กสแลช (\)

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

วางทั้งสองคำสั่งเหล่านี้ในไฟล์แบตช์และเรียกใช้

ตอนนี้ถ้าเพียง xcopy หรือ robocopy มีสิ่งนี้ในตัว



0

ฉันได้รับคำตอบที่เป็นประโยชน์สำหรับคำถามของคุณแล้ว

ประการแรกเมื่อใช้FORFILESกับ/Sพารามิเตอร์ให้ยอมรับว่าทุกไดเรกทอรีย่อยC:\testจะถึง

ประการที่สองด้วย/Cพารามิเตอร์เป็นไปได้ที่จะเริ่มต้น chain ของคำสั่งด้วยตัวแปรเนทีฟซึ่งทำให้สามารถสร้างไดเรคทอรีไดเรกทอรีที่ปลายทางและจากนั้นคัดลอกไฟล์ไปไว้ข้างในโดยใช้โครงสร้างที่มีเงื่อนไขสองเงื่อนไข

โครงสร้างที่มีเงื่อนไขแรก@isdir==TRUE(ตรวจสอบให้แน่ใจว่าใช้ตัวอักษรพิมพ์ใหญ่) อนุญาตให้รับเฉพาะไดเรกทอรีจากแหล่งที่มาจากนั้นจึงสร้างขึ้นMKDIR [path]\@relpathที่ปลายทางด้วยท้าย

ในที่สุดอันที่สองทำให้แน่ใจว่ามันทำงานกับไฟล์เท่านั้น@isdir==FALSEจากนั้นคำสั่ง COPY ก็จะทำงานให้เสร็จได้รับไฟล์ทั้งหมดที่เข้าถึงได้โดยคำสั่ง FORFILES ตั้ง[path]@relpathเป็นปลายทางเพื่อคัดลอกไฟล์ไปยังไดเรกทอรีที่เพิ่งสร้างขึ้น

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

หวังว่าจะช่วยทุกคนที่นี่


-2

สิ่งนี้จะทำจาก GUI ไม่ทราบว่าพวกเขาทำได้อย่างไร

"... โปรแกรมขนาดเล็กจะช่วยให้คุณเลือก" จากไดเรกทอรี "และ" ลงในไดเรกทอรี "และจะดำเนินการคัดลอกเฉพาะโครงสร้างไดเรกทอรี"

http://www.rjlsoftware.com/software/utility/treecopy/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.