File batch untuk menyalin direktori secara rekursif

Jawaban:

178

Lihat xcopy , yang akan menyalin file dan subdirektori secara rekursif.

Ada contoh, 2/3 halaman. Penggunaan tertentu adalah:

Untuk menyalin semua file dan subdirektori (termasuk subdirektori kosong) dari drive A ke drive B, ketik:

xcopy a: b: /s /e

lc.
sumber
16
Anda mungkin ingin flag / y disertakan juga ke "Suppresses prompt untuk mengonfirmasi bahwa Anda ingin menimpa file tujuan yang sudah ada."
Matthew Lock
11
'xcopy' bukanlah ide yang baik karena terkenal dengan kesalahan memori yang tidak mencukupi . Coba gunakan 'robocopy'
Rahul
6
@Rahul Hmm benarkah? Aku belum pernah melihat itu, tapi xcopy telah pasti sudah ada sejak zaman kegelapan. Anda mungkin bisa melakukannya Copy-Item -Recursedi PowerShell juga.
lc.
1
Sayangnya ya, perilaku ini sangat umum :). Jika telah melihat ini terjadi berulang kali terutama jika Anda ingin menyalin data dalam jumlah besar seperti pertunjukan data.
Rahul
10
Ini mengatakan bahwa xcopy sudah usang dan robocopy harus digunakan.
Mike HR
71

Setelah membaca komentar jawaban yang diterima, saya mencoba perintah robocopy , yang berfungsi untuk saya (menggunakan command prompt standar dari Windows 7 64 bits SP 1):

robocopy source_dir dest_dir /s /e
Antonio Vinicius Menezes Medei
sumber
5
Tidak pernah tahu 'robocopy' adalah perintah bawaan di windows 7! Terima kasih atas jawabannya, sangat membantu dan kuat :)
Anmol Saraf
5
Tidak /Emenyiratkan /S? copy subdirectories, including Empty ones.
mbomb007
4
Hmmm /Sdan /Esepertinya menyiratkan hal-hal yang berlawanan menurut /?bantuan robocopy - s adalah "tidak kosong" e adalah "yang kosong". Saya pikir Anda harus memilih satu saja.
Stuart Brock
1
Bagi sebagian besar pengguna, menurut saya itu cukup untuk melakukan / e (menyertakan direktori kosong).
phsource
3
Perhatikan bahwa robocopymengembalikan kode keluar 1 jika satu atau lebih file berhasil disalin.
dougnorton
15

Anda dapat menulis algoritme rekursif dalam Batch yang memberi Anda kontrol tepat atas apa yang Anda lakukan di setiap subdirektori bertingkat:

@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 Looping Melalui Direktori untuk Memproses File?

Aacini
sumber
4
Ide bagus, tetapi bukankah program Anda menyalin semua file dari direktori sumber ke satu direktori tujuan tanpa mempertahankan hierarki folder?
Jean-Francois T.