Hàng loạt tệp để sao chép các thư mục một cách đệ quy


123

Có cách nào để sao chép các thư mục một cách đệ quy bên trong tệp .bat không? Nếu vậy, một ví dụ sẽ rất tuyệt. cảm ơn.


2
ý bạn là xcopy / s? hay nội soi robot tiên tiến hơn?
rene

Điều này có thể giúp bạn, mặc dù xóa này bạn có thể dễ dàng thay đổi để sao chép thay vì daniweb.com/web-development/threads/61479/...
Georges Chitiga

Câu trả lời:


178

Nhìn vào xcopy , nó sẽ sao chép đệ quy các tệp và thư mục con.

Có các ví dụ, 2/3 xuống trang. Sử dụng cụ thể là:

Để sao chép tất cả các tệp và thư mục con (bao gồm bất kỳ thư mục con nào trống) từ ổ A sang ổ B, hãy nhập:

xcopy a: b: /s /e


16
Có thể bạn cũng muốn gắn cờ / y vào "Ngăn chặn lời nhắc xác nhận bạn muốn ghi đè tệp đích hiện có".
Matthew Lock,

11
'xcopy' không phải là một ý tưởng hay vì chúng nổi tiếng với lỗi Bộ nhớ không đủ . Thử sử dụng 'robocopy'
Rahul

6
@Rahul Hmm thật hả? Tôi chưa từng thấy đó, nhưng xcopy đã chắc chắn được khoảng từ lứa tuổi tối tăm. Bạn cũng có thể thực hiện Copy-Item -Recursetrong PowerShell.
lc.

1
Thật không may là có, hành vi này là rất phổ biến :). Nếu đã thấy điều này xảy ra lặp đi lặp lại, đặc biệt nếu bạn muốn sao chép số lượng lớn dữ liệu như hợp đồng biểu diễn dữ liệu.
Rahul

10
Điều này nói rằng xcopy đã không được dùng nữa và nên sử dụng nội soi tự động.
Mike HR

71

Sau khi đọc các nhận xét của câu trả lời được chấp nhận, tôi đã thử lệnh robocopy , lệnh này phù hợp với tôi (sử dụng dấu nhắc lệnh tiêu chuẩn từ Windows 7 64 bit SP 1):

robocopy source_dir dest_dir /s /e

5
Chưa bao giờ biết 'robocopy' là một lệnh có sẵn trong windows 7! Cám ơn câu trả lời, rất hữu ích và mạnh mẽ :)
Anmol Saraf

5
Không /Eám chỉ /S? copy subdirectories, including Empty ones.
mbomb007,

4
Hmmm /S/Edường như ngụ ý những điều đối lập theo sự /?trợ giúp của robocopy - s là "không phải là những cái trống" e là "những cái trống". Tôi nghĩ bạn chỉ nên chọn một.
Stuart Brock

1
Đối với hầu hết người dùng, tôi nghĩ rằng nó đủ để làm / e (bao gồm các thư mục trống).
phsource

3
Lưu ý rằng robocopytrả về mã thoát là 1 nếu một hoặc nhiều tệp đã được sao chép thành công.
dougnorton

15

Bạn có thể viết một thuật toán đệ quy trong Batch cho phép bạn kiểm soát chính xác những gì bạn làm trong mọi thư mục con lồng nhau:

@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 qua các thư mục để xử lý các tập tin?


4
Ý tưởng tuyệt vời nhưng không phải chương trình của bạn sao chép tất cả các tệp từ các thư mục nguồn vào một thư mục đích duy nhất mà không bảo toàn phân cấp thư mục?
Jean-Francois T.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.