แบตช์ไฟล์เพื่อคัดลอกไดเร็กทอรีแบบวนซ้ำ


123

มีวิธีคัดลอกไดเรกทอรีซ้ำ ๆ ภายในไฟล์. bat หรือไม่ ถ้าเป็นเช่นนั้นตัวอย่างจะดีมาก ขอบคุณ


2
คุณหมายถึง xcopy / s? หรือ robocopy ขั้นสูง?
rene

สิ่งนี้อาจช่วยคุณได้แม้ว่าการลบนี้คุณสามารถเปลี่ยนเป็นการคัดลอกแทนdaniweb.com/web-development/threads/61479/…
Georges Chitiga

คำตอบ:


178

ดูในxcopyซึ่งจะคัดลอกไฟล์และไดเรกทอรีย่อยแบบวนซ้ำ

มีตัวอย่าง 2/3 ด้านล่างของหน้า การใช้งานโดยเฉพาะคือ:

ในการคัดลอกไฟล์และไดเร็กทอรีย่อยทั้งหมด (รวมถึงไดเร็กทอรีย่อยว่าง) จากไดรฟ์ A ไปยังไดรฟ์ B ให้พิมพ์:

xcopy a: b: /s /e


16
คุณอาจต้องการให้แฟล็ก / y รวมอยู่ด้วยเพื่อ "ระงับการแจ้งให้ยืนยันว่าคุณต้องการเขียนทับไฟล์ปลายทางที่มีอยู่"
Matthew Lock

11
'xcopy' ไม่ได้เป็นความคิดที่ดีเพราะพวกเขามีชื่อเสียงอย่างฉาวโฉ่สำหรับข้อผิดพลาดของหน่วยความจำไม่เพียงพอ ลองใช้ 'robocopy'
Rahul

6
@ ราหุลหืมจริงเหรอ? ฉันไม่เคยเห็นมาก่อน แต่ xcopy มีมาตั้งแต่ยุคมืดแล้ว คุณอาจทำได้Copy-Item -Recurseใน PowerShell แทนเช่นกัน
lc.

1
น่าเสียดายใช่พฤติกรรมนี้เป็นเรื่องปกติมาก :) หากเคยเห็นสิ่งนี้เกิดขึ้นซ้ำ ๆ โดยเฉพาะอย่างยิ่งหากคุณต้องการคัดลอกข้อมูลจำนวนมากเช่นข้อมูล gigs
Rahul

10
สิ่งนี้บอกว่า xcopy เลิกใช้งานแล้วและควรใช้ robocopy
Mike HR

71

หลังจากอ่านความคิดเห็นของคำตอบที่ยอมรับแล้วฉันลองใช้คำสั่งrobocopyซึ่งใช้ได้ผลสำหรับฉัน (โดยใช้พรอมต์คำสั่งมาตรฐานจาก Windows 7 64 บิต SP 1):

robocopy source_dir dest_dir /s /e

5
ไม่เคยรู้ว่า 'robocopy' เป็นคำสั่ง inbuilt ใน windows 7! ขอบคุณสำหรับคำตอบมีประโยชน์และมีพลังมาก :)
Anmol Saraf

5
ไม่ได้/Eหมายความว่า/S? copy subdirectories, including Empty ones.
mbomb007

4
อืม/Sและ/Eดูเหมือนจะมีนัยตรงข้ามกับสิ่งต่างๆตามความ/?ช่วยเหลือของrobocopy - s คือ "not empty" e คือ "empty ones" ฉันคิดว่าคุณควรเลือกอย่างใดอย่างหนึ่ง
Stuart Brock

1
สำหรับผู้ใช้ส่วนใหญ่ฉันคิดว่าเพียงพอที่จะทำ / e (รวมไดเรกทอรีว่าง)
phsource

3
โปรดทราบว่าrobocopyจะส่งคืนรหัสออกเป็น 1 หากคัดลอกไฟล์อย่างน้อยหนึ่งไฟล์สำเร็จ
dougnorton

15

คุณสามารถเขียนอัลกอริธึมแบบวนซ้ำใน Batch ที่ให้คุณควบคุมสิ่งที่คุณทำในทุกไดเรกทอรีย่อยที่ซ้อนกันได้:

@echo off
call :treeProcess
goto :eof

:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
copy *.* C:\dest\dir
for /D %%d in (*) do (
    cd %%d
    call :treeProcess
    cd ..
)
exit /b

Windows Batch File วนลูปผ่านไดเร็กทอรีเพื่อประมวลผลไฟล์?


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