Lệnh Commmand để sao chép toàn bộ thư mục (bao gồm thư mục thư mục) sang thư mục khác


68

bằng cách sử dụng dòng lệnh, tôi muốn sao chép một thư mục khác. Ví dụ có thư mục C:/testC:/test2.

Tôi muốn sao chép C:/testvào C:/test2để kết quả sẽ đượcC:/test2/test

Tất cả những gì tôi đã tìm thấy cho đến nay sẽ chỉ sao chép các tập tin và thư mục chứa trong C:/testthành C:/test2, nhưng lá ra thư mục cha.


1
thử sử dụng xcopy

Câu trả lời:


50

Hãy thử sử dụng XCOPYvới công /Etắc. Thêm thông tin ở đây .

Tôi đã không phải truy cập thông tin này từ não của tôi trong nhiều năm !

CẬP NHẬT

Các tài liệu nói rằng nó sao chép tất cả các file và thư mục con từ thư mục nguồn (có nghĩa là thư mục cha không được tạo ra), vì vậy bạn sẽ phải tạo ra testtrong C:\test2lần đầu tiên và sau đó sử dụng XCOPY.


2
Công tắc '/ T' trên Xcopy sẽ thực hiện sao chép cấu trúc thư mục & thư mục con mà không cần bất kỳ tệp nào.
mfg

2
Sử dụng tốt hơn robocopy /CREATE /COPYALL /DCOPY:T src dstđể chỉ sao chép thư mục và các tệp trống nhưng bảo toàn tất cả dấu thời gian và các thuộc tính khác.
user1016274

2
Điều này thực sự không cung cấp câu trả lời cho câu hỏi vì thư mục testvẫn chưa được tạo.
IGRACH

3
@IGRACH Tôi nghĩ md testvà sau đó sử dụng xcopylà rõ ràng tầm thường.
vivin

1
Vâng câu hỏi là về copythư mục không tạo thư mục mới và sau đó sao chép contens trong đó.
IGRACH

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

Đây là thông tin về XCOPY [ 1 , 2 ]


2
Làm thế nào để ngừng yêu cầu tôi nhập "D"?
YumYumYum

2
@YumYumYum: Bạn có thể sử dụng công tắc / I: "/ I Nếu đích không tồn tại và sao chép nhiều hơn một tệp, giả sử rằng đích phải là một thư mục."
Thijs Tijsma

18

Sử dụng ROBOCOPY nếu bạn đang tạo tập lệnh sao lưu. xcopy đã không được chấp nhận và có thể sẽ bị loại bỏ sử dụng trong tương lai gần. robocopy có thể làm mọi thứ xcopy có thể. Nó cũng linh hoạt và đáng tin cậy hơn. Tạo các kịch bản với bản sao sẽ chứng minh chúng trong tương lai.


  1. Sử dụng robocopy để dễ dàng sao chép các thư mục. Lệnh robocopy thay thế lệnh xcopy. Nó có thể nhanh chóng sao chép toàn bộ thư mục mà không phải lo lắng về việc xác định nội dung. Ví dụ: để sao chép tất cả nội dung của thư mục C: \ tools vào thư mục mới D: \ backup \ tools, hãy nhập như sau:

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

    Công cụ sửa đổi / e báo cho robocopy bao gồm tất cả các thư mục con. Điều này bao gồm các thư mục trống. robocopy sẽ tự động sao chép các tập tin ẩn và hệ thống. Nó sẽ tạo các thư mục mới nếu chúng không tồn tại ở vị trí đích.

  2. Phản chiếu một thư mục. Phản chiếu một thư mục là tuyệt vời để tạo bản sao lưu. Tùy chọn nhân bản của robocopy sẽ sao chép tất cả các nội dung từ nguồn đến đích. Sau đó nó sẽ xóa bất cứ thứ gì ở đích không tồn tại ở nguồn. Điều này đảm bảo rằng bản sao lưu của bạn chỉ có các phiên bản mới nhất của tệp. Ví dụ: để phản chiếu C: \ Users \ My Documents sang D: \ backup \ My Documents, hãy nhập thông tin sau: [4]

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

    Chức năng này sẽ bảo vệ tất cả các quyền của các tập tin gốc.

  3. Cho phép khởi động lại. Bạn có thể muốn bao gồm khả năng khởi động lại quá trình trong trường hợp kết nối bị cắt giữa bản sao.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Đăng nhập quá trình sao chép. robocopy cho phép bạn tạo một tệp nhật ký. Điều này có thể giúp bạn xác định chính xác các vấn đề hoặc tạo một kho lưu trữ những gì đã được sao chép.

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

    Công cụ sửa đổi / log + sẽ nối thêm tệp nhật ký hiện tại thay vì ghi đè lên nó. Nếu bạn muốn ghi đè lên tệp nhật ký cũ, hãy sử dụng /log:.txt.


8

Tôi khuyên bạn nên dùng robocopy trên xcopy , vì nó có nhiều tùy chọn hơn, bao gồm giữ nguyên dấu thời gian, điều mà tôi thấy cần thiết.

Robocopy cần được thêm vào XP / 2003, nhưng nó là tiêu chuẩn từ Vista trở đi.

Tôi thực sự thường sử dụng xxcopy , nhưng phiên bản 64 bit không miễn phí.


1
robocopylà một chương trình Windows. Câu hỏi là về DOS.
grawity

9
@grawity: Khả năng anh ta thực sự sử dụng DOS 16 bit là rất nhỏ so với khả năng cao anh ta gọi CMD là 'DOS', như thường thấy trong thế giới thực.
paradroid

Câu hỏi thực sự là: robocopy có phải là chương trình của Microsoft không?
knocte

@knocte đúng vậy
yossico 28/03/18


3

Nếu câu hỏi ban đầu là những gì tôi đang tìm kiếm một câu trả lời thì tôi, và rõ ràng không có ai ở trên, đã đưa ra một giải pháp rõ ràng.

Những gì tôi đang tìm kiếm là sao chép thư mục thử nghiệm vào thư mục test2 mà không cần phải nhập lại. Cái gì đó như

xcopy /isvy c:\test d:\test2

nơi d:\test2\testkhông tồn tại trước khi sao chép nhưng làm sau. Điều này sẽ tiết kiệm cho bài kiểm tra gõ sai lần thứ hai trong đường dẫn đích. Lệnh trên sẽ sao chép tất cả các tệp và bất kỳ thư mục nào vào test2 nhưng sẽ không tạo thư mục thử nghiệm.

Cho đến nay

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

thực sự là cách duy nhất tôi tìm thấy để hoàn thành công việc này. Một lần nữa nếu bạn có vấn đề gõ, không có gì đảm bảo rằng các thư mục nguồn và đích sẽ khớp.

Một cách khác để sửa lỗi này là

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

Điều này đặt thư mục đích trong mydirbiến sau đó sử dụng biến đó trong cả đường dẫn nguồn và đích. Nếu bạn nhập sai biến, bạn sẽ gặp lỗi hoặc thư mục đích có thể sẽ có %ở đầu và cuối.

Nó dài hơn để gõ nhưng ít cơ hội nhận được tên sai. Họ sẽ được chú ý.


Đó thực sự là xcopy /ievy c:\test d:\test2\testđể giữ cấu trúc cây thư mục và set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%chỉ trong 1 & sẽ đủ, vì kết quả của việc đặt giá trị luôn thành công.
NetwOrchestration

0
xcopy SWITCHES SOURCE DESTINATION

Nơi SWITCHEScó thể:

  • Để sao chép toàn bộ cấu trúc thư mục:

    /hiev

  • Để ghi đè các tệp trong đích (trong trường hợp thư mục đích đã tồn tại):

    /hievry

  • Để ghi đè và cũng sao chép bằng ACL + Thuộc tính:

    /hievxok

Phù hợp nhất với trường hợp của bạn:

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


0

Tôi đã có một tình huống tương tự khi tôi cần sao chép một số thư mục bao gồm tên thư mục đến một vị trí đích và hy vọng câu hỏi được đánh dấu trả lời này sẽ có ích, nhưng thực sự không phải vậy.

Đầu tiên, chắc chắn sẽ có những lúc người ta cần khả năng này và tôi đã gặp phải một khi tôi phải sao chép các thư mục từ C: \ Windows \ hội \ GAC_MSIL. Windows Explorer từ chối hiển thị thư mục này, vì vậy bạn phải sử dụng dấu nhắc lệnh.

Nếu bạn đã quen thuộc với thư mục GAC, bạn sẽ biết rằng tên thư mục không tầm thường và dễ bị nhầm nếu bạn gõ nhầm.

Vì vậy, việc tạo thư mục trước đó không thực sự là một tùy chọn - trừ khi bạn sử dụng tập lệnh - mà cuối cùng tôi đã sử dụng, vì đây là giải pháp thực sự duy nhất.

Đầu tiên kết xuất các thư mục bạn muốn sao chép vào một tệp tạm thời, điều này thường dựa trên một số mẫu, ví dụ

dir /B policy* > Folders.txt

Sau đó lặp qua các mục trong bãi chứa và sao chép đến đích. Xcopy sẽ đảm nhiệm việc tạo thư mục nếu bạn kết thúc đối số đích bằng dấu gạch chéo ngược (\)

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

Đặt cả hai lệnh này trong một tệp bó và chạy.

Bây giờ nếu chỉ xcopy hoặc robocopy có tích hợp này.


0

XCOPY SourceDrive: DestinationDrive: / S / E


Chào mừng bạn đến với Siêu người dùng! Bạn có thể giải thích điều này? (đặc biệt là những /S /Elá cờ)
bertieb

0

Tôi đã đi đến một câu trả lời thay thế chức năng cho câu hỏi của bạn.

Đầu tiên, bằng cách sử dụng FORFILESvới /Stham số, xác nhận rằng mọi thư mục con C:\testsẽ được tiếp cận.

Thứ hai, với /Ctham số, có thể bắt đầu một chuỗi các lệnh với các biến gốc, điều này có thể tạo các thư mục nhận dạng tại đích và THEN sao chép các tệp vào bên trong chúng, sử dụng hai cấu trúc có điều kiện.

Cấu trúc có điều kiện đầu tiên @isdir==TRUE(đảm bảo sử dụng chữ in hoa), cho phép chỉ nhận các thư mục từ nguồn, sau đó tạo chúng ở định mệnh với MKDIR [path]\@relpathcuối.

Cuối cùng, cái thứ hai đảm bảo rằng nó chỉ hoạt động với các tệp @isdir==FALSE, và sau đó lệnh COPY chỉ đơn giản là hoàn thành công việc, nhận tất cả các tệp đạt được bằng lệnh FORFILES, đặt [path]@relpathlàm đích, để sao chép các tệp vào bên trong các thư mục vừa tạo.

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

Hy vọng rằng sẽ giúp tất cả mọi người xung quanh đây.


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.