Robocopy không sao chép thư mục gốc và dấu thời gian của nó


10

Robocopy không sao chép thư mục gốc và dấu thời gian của nó - nó sao chép tất cả các thư mục con và tệp (khi các tùy chọn phù hợp được đặt) và dường như không có tùy chọn / đối số nào để nói với Robocopy bạn muốn chính thư mục gốc và dấu thời gian hoặc thuộc tính của nó cũng được sao chép nguyên văn.

Vì vậy, nói rằng tôi muốn tôi muốn sao chép C: / Brush

Robocopy sẽ sao chép tất cả các thư mục con và tệp của nó vào đích, nhưng không phải chính thư mục Brush, với tất cả các thuộc tính và dấu thời gian liên quan.

Bạn hiểu những gì tôi đang hỏi? Điều này là khá cơ bản và Robocopy dường như thiếu một tùy chọn cho nó. Mọi người đã đặt câu hỏi trước đây trên nhiều diễn đàn nhưng theo tôi thấy, không ai trả lời câu hỏi này.

nhập mô tả hình ảnh ở đây


1
Đây là một tờ rơi, dựa trên kinh nghiệm của tôi rsync, nhưng nếu bạn không có dấu gạch chéo ở cuối thư mục đích thì sao? Còn về việc cố gắng sửa đổi tập lệnh ở cấp dòng lệnh thay vì sử dụng GUI thì sao? Tôi biết một thực tế rằng công cụ dòng lệnh sẽ làm những gì bạn cần.

@Randolph West: hiện tại tôi không có dấu gạch chéo ở cuối thư mục đích. Tôi vẫn không thể tạo Robocopy bao gồm thư mục nguồn và các thuộc tính của nó, v.v. trong công việc sao chép thực tế. Có ý kiến ​​gì không?
ptrcao

Nếu không có giải pháp cho robocopy, bạn có thể xem xxcopy (có phần mềm miễn phí và phiên bản thương mại).
harrymc

Đúng, tôi hiểu hoàn toàn và đã thêm một giải pháp làm việc dưới đây. Vấn đề thực sự là bạn phải chỉ định tất cả các tệp và thư mục trong thư mục gốc KHÔNG sao chép.
opsin

Câu trả lời:


9
robocopy %1 "C:\DestinationDirectory\%~n1" /E /V /DCOPY:T /LOG:"C:\DestinationDirectory\Copied.txt" /R:10 /W:30 

Thả một thư mục vào bathoặc sử dụng trong Gửi đến . Nó sẽ tạo thư mục có tên và dấu thời gian của thư mục nguồn và sao chép tất cả các tệp.


cảm ơn bạn rất nhiều, đã tìm kiếm toán tử% ~ n1 kỳ diệu đó
hotzen

@hotzen, %~n1làm gì?
Pacerier

1
Kẻ

"Mở rộng% 1 thành tên tệp."
hotzen

Microsoft đã phá vỡ tất cả các liên kết của họ, ở đây có tỷ lệ dấu ngã tài liệu cho hàng loạt, en.wikibooks.org/wiki/Windows_Batch_Scripting#Percent_tilde
kevinf

3

Tôi đồng ý với OP, việc không thể sao chép thư mục gốc là một thiếu sót lớn của bản sao. Làm thế nào về gian lận và di chuyển thư mục bàn chải vào một thư mục tạm thời, thực hiện thao tác sao chép trên thư mục tạm thời, sau đó di chuyển nó trở lại?

Cái gì đó như:

md "c:\verytemporary" && move "c:\brushes" "C:\verytemporary"||( echo Line 1 error occurred & goto :eof )
robocopy c:\verytemporary d:\ /MIR /DCOPY:T
move "c:\verytemporary\brushes" "c:\" && rd /q "c:\verytemporary"||echo Line 3 error occurred

2

Hãy thử md D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushestừ dòng lệnh, thay thế các đường dẫn chính xác.


3
Vâng, nhưng bạn đang tạo một thư mục mới sẽ không có các thuộc tính của thư mục C: \ chổi gốc ...?
ptrcao

2

Như tôi có thể thấy không có giải pháp tốt và dễ dàng trong bất kỳ câu trả lời nào:

Nếu không có giải pháp cho robocopy, bạn có thể xem xxcopy (có phần mềm miễn phí và phiên bản thương mại).

Tất nhiên có nhiều lựa chọn thay thế khác cho robocopy, một số được liệt kê ở đây .
Xem thêm Tiện ích sao chép tệp miễn phí tốt nhất .


1
xxcopylà một tiện ích tuyệt vời, nhưng phiên bản phần mềm miễn phí có một lời nhắc mà bạn phải phản hồi nếu bạn sử dụng bất kỳ danh sách lớn các công tắc dòng lệnh nào. Sử dụng xxcopytừ một cửa sổ lệnh, lời nhắc thêm này gây khó chịu. Nhưng nó ngăn chặn (làm phức tạp) việc sử dụng xxcopytừ một tệp bó.
Kevin Fegan

1

Câu trả lời của người dùng 105198 là một nửa,

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes thực sự sẽ chỉ tạo một thư mục mới. Bạn sẽ cần phải thêm / MIR và / DCOPY: T vào nó

Với tùy chọn / mir , nếu thư mục đích tồn tại, cài đặt bảo mật thư mục đích sẽ bị ghi đè. Kỹ thuật

/DCOPY:T :: COPY Directory Timestamps.

kết hợp với nhau, có nghĩa là: các thuộc tính và dấu thời gian của thư mục nguồn sẽ được nhân đôi vào thư mục đã tạo.

vì thế:

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes /MIR /DCOPY:T

1

Tôi nghĩ bạn sẽ thấy rằng Robocopy thực hiện chính xác những gì bạn muốn, miễn là bạn bảo nó sao chép dấu thời gian của thư mục (/ DCOPY: T). Từ các thử nghiệm của tôi, tôi đã thấy các hành vi (dường như không có giấy tờ) sau đây là đúng với Robocopy:

Tất cả các thuộc tính được chỉ định của thư mục nguồn được áp dụng cho thư mục đích, bất kể thư mục đích tồn tại, không tồn tại hay có tên khác với thư mục nguồn.

Các thuộc tính được chỉ định có thể bao gồm (ít nhất) thông tin bảo mật (/ SEC) hoặc dấu thời gian thư mục (/ DCOPY: T).

Do đó, trong ví dụ sau, thư mục c: \ Destination \ sẽ được gán cùng dấu thời gian như thư mục c: \ source \.

robocopy c:\source\folder C:\destination\folder /E /DCOPY:T

Tôi đã thử nghiệm điều này với các phiên bản Robocopy đi kèm với Windows 7, Windows 8 và Bộ tài nguyên Windows 2003 (chỉ tham số / SEC). Lưu ý rằng chỉ các phiên bản mới hơn của Robocopy (XP026 trở lên) mới hỗ trợ tham số / DCOPY: T.


0

Nếu bạn kết hợp /IF :: Include the following Files.với /E :: copy subdirectories, including Empty ones.bạn sẽ có được (gần) hiệu quả mong muốn:

C:\Temp\Robocopy Source Root>robocopy . "C:\Temp\Robocopy Destination" /E /IF "Brushes*"

1
Bạn có ý nghĩa gì "gần gũi"? Giới hạn bạn đang ngụ ý là gì?
ptrcao

Robinson sẽ nguy hiểm !!! Đề xuất của bạn dường như sao chép mọi thư mục trong thư mục hiện tại, không giới hạn ở các thư mục bắt đầu bằng "Bàn chải"
GlennFromIowa

0

Robocopy không thực sự được thiết kế để làm điều đó một cách dễ dàng. Tuy nhiên, có một cách.

Thư mục gốc chứa cho phép nói 50 tệp và 40 thư mục. Bạn chỉ muốn thư mục X (nhưng bạn cũng muốn đó là dấu thời gian và ngày).

ROBOCOPY c:\ d:\ /XF 50 root file names c:\boot.ini c:\bla.txt etc. /XD c:\windows c:\drivers c:\temp etc. /S /E /SEC /DCOPY:T

/ DCOPY: T bảo nó giữ dấu thời gian của thư mục. / XF chỉ định tệp nào KHÔNG sao chép, / XD chỉ định thư mục nào KHÔNG sao chép. Chỉ không chỉ định thư mục c: \ X.

Hạn chế chính của việc này là nghiên cứu tất cả các thư mục và tên tệp trong thư mục gốc và đặc biệt gọi tất cả chúng ở đây. Nếu bạn đang làm điều này rất nhiều trên các hệ thống khác nhau, một kịch bản có thể được viết.

Ví dụ làm việc

robocopy c: \ tests c: \ abc / XF c: \ tests \ tests.txt / XD "C: \ tests \ Thư mục mới (2)" "C: \ tests \ Thư mục mới (3)" / S / E / GIÂY / DCOPY: T

Ví dụ làm việc gốc

robocopy c: \ d: \ / XF c: \ tests.txt / XD "C: \ Thư mục mới (2)" "C: \ Thư mục mới (3)" / S / E / SEC / DCOPY: T

Thử nghiệm của tôi đã hoạt động, tôi tạo một vài thư mục và thư mục con, c: \ tests là root trong trường hợp này, c: \ abc là root của một ổ đĩa khác (rõ ràng chúng không thực sự, nhưng với mục đích này thì nó có ý nghĩa). Thư mục tôi muốn từ thư mục gốc được gọi là "Thư mục mới", vì bạn có thể thấy tôi không chỉ định nó trong / XD. Ngoài ra, hãy đảm bảo bạn chỉ định c: \ hoặc tên bạn sử dụng sẽ là toàn cục. Nói cách khác, nếu tôi không chỉ định c: \ tests in từ tệp tests.txt, nó sẽ bỏ qua nó từ TẤT CẢ các thư mục con đang được sao chép. / SEC sẽ sao chép tất cả các tem bảo mật và thời gian.


Hmmm, tôi cho rằng bạn có thể sử dụng / XF c: *. * Để loại trừ tất cả các tệp gốc. Tôi sẽ kiểm tra xem khi tôi ở trước máy chứ không phải trên điện thoại.
opsin

Không, c: *. * Không hợp lệ, bạn sẽ phải liệt kê thủ công tất cả các tệp.
opsin

0

Về lý thuyết, sử dụng /DCOPY:Tnên giải quyết tất cả các vấn đề của bạn.

Nhưng, tôi đã thấy điều này xảy ra, và tôi không chắc là tôi gọi nó là "lỗi", mà là hậu quả của chuỗi hoạt động (OK, bug).

Lệnh này sẽ hoạt động để sao chép tất cả các tệp từ C:\Brushesđến D:\NEWBrushes/DCOPY:Tsẽ khiến các dấu thời gian của thư mục nguồn được sao chép vào thư mục đích:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

Những gì tôi đã thấy (ít nhất là trên một số phiên bản Robocopy) là lệnh thành công, nhưng dấu thời gian của D:\NEWBrushesthư mục được đặt thành ngày và giờ hiện tại.

Vì vậy, có vẻ như /DCOPY:Ttính năng này không hoạt động đối với thư mục "cơ sở" (trên cùng) mà bạn đang sao chép.

Tôi tin rằng nó đang hoạt động, nhưng dấu thời gian của thư mục đích đang bị "dẫm đạp" bởi các hoạt động nằm sau chuỗi hoạt động.

Những gì tôi tin là đang xảy ra cho lệnh này:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

là một cái gì đó như thế này:

  1. Tạo thư mục D:\NEWBrushesnếu nó không tồn tại
  2. Sao chép dấu thời gian từ C:\BrushesđếnD:\NEWBrushes
  3. Sao chép tập tin và thư mục phụ từ C:\BrushesđểD:\NEWBrushes

Có vẻ như Bước 3, việc sửa đổi nội dung của thư mục D:\NEWBrusheskhiến dấu thời gian D:\NEWBrushesthay đổi.

Đối với tôi, "cách giải quyết" là chạy robocopylệnh sao chép các tệp và thư mục, sau đó chạy lệnh (tương tự) robocopylần thứ hai.

Vì vậy, lần đầu tiên bạn chạy:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

tất cả các tập tin và thư mục sẽ được sao chép. Sau đó chạy lại:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
  (or)
robocopy "C:\Brushes" "D:\NEWBrushes" /DCOPY:T

Lần thứ hai robocopychạy, không có các tập tin hoặc thư mục bên trong D:\NEWBrushessẽ được sửa đổi, và các /DCOPY:Ttùy chọn sẽ cho robocopyđể sao chép các dấu thời gian từ C:\Brushesđến D:\NEWBrushes(trừ khi có các thư mục / tập tin trong C:\Brushesđó đã thay đổi kể từ khi chạy đầu tiên của robocopy).


-1

Tôi đã giải quyết các thư mục gốc ngay bây giờ cho một kịch bản sao lưu thực sự nhanh chóng và dễ dàng với bản sao lưu, có một ví dụ. Nên giúp đỡ bất cứ ai:

$Destination="F:\Backup" #change destionation backup drive and foder
$BackupDirs="d:\folder1", "d:\folder2", "d:\folder3\subfolder", "d:\fodler4\subfolder\subsubfodler" #change source folders

#make a loop for every source folder
foreach ($Backup in $BackupDirs) {

#split folder name
$fdname = Split-Path $Backup -leaf

#define folder to create in destionation
$dirtocreate = Join-Path $Destination $fdname

#make directory, yes, some extra script to skip when exist should be in place, but -erroraction solved this in lazy mode :)
md $dirtocreate -ErrorAction SilentlyContinue 

#copy with subfolders and log
robocopy $backup $dirtocreate  /s /nfl /ndl /log:c:\scripts\backup.log

}

Vì vậy, sử dụng PowerScript này và vấn đề đã được giải quyết, phải không?
Pimp Juice IT
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.