Loại trừ thư mục Wildcard với robocopy - trường hợp lạ


16

Tôi cần lấy bản sao để loại trừ bất kỳ tệp nào có đường dẫn chứa một thư mục có tên cụ thể. Ví dụ: "thanh":

c:\foo\bar\a.txt
c:\bar\c.txt
d:\baz\bar\flub\d.txt

nên được loại trừ, nhưng không

c:\foo\barf\b.txt

Dưới đây là những điều tôi đã thử - mỗi trong số đó đã bị từ chối bởi robocopy:

/XD \bar\
/XD *\bar\*
/XD *^\bar^\*

Có ý kiến ​​gì không?

Câu trả lời:


18

Hóa ra / XD khớp với tên thư mục - không phải đường dẫn đầy đủ. Vì vậy, bạn thực sự không phải lo lắng về việc khớp dấu gạch chéo ngược.

Vì vậy, để loại trừ các thư mục (bất cứ nơi nào trong đường dẫn) được gọi là "thanh", một thanh đơn giản / XD sẽ hoạt động. Nếu bạn cũng muốn loại trừ "barf", bạn có thể sử dụng / XD bar *.

Đôi khi câu trả lời đơn giản hơn bạn nghĩ.


4

Một phần của sự thất bại là sử dụng dấu \ trong Robocopy khi đề cập đến một thư mục - điều này là không - vì Robocopy cố gắng diễn giải nó như một nhân vật thoát. Hầu như tất cả mọi người đều mắc lỗi này bằng cách này hay cách khác với Robocopy. Với ý nghĩ đó, ví dụ này sẽ hoạt động:

/XD "\Bar"

Nếu bạn muốn khớp với cấu trúc thư mục cụ thể hơn (để không khớp với các thư mục con khác, bạn có thể thêm chi tiết, như:

/XD "\Foo\Bar"
/XD "C:\Foo\Bar"

2
Loại trừ ký tự đại diện không hoạt động. Robocopy sẽ đưa ra một lỗi nếu bạn cố gắng. Bạn đã kiểm tra ví dụ của bạn?
dùng1751825

Tôi đã làm và sử dụng nó, ngoại trừ thực tế là tôi đã thêm một dấu hoa thị vào ví dụ của mình, mà tôi nghĩ rằng tôi nhầm lẫn cú pháp với công tắc / XF. Tôi đã sửa chữa phản ứng của tôi. Cảm ơn.
Micheal Espinola

1

Nếu bạn đang thử các bộ lọc thư mục khác nhau, hãy đảm bảo xóa thư mục đích giữa các thay đổi!

Một vấn đề đối với tôi là tôi đã không nhận ra việc chuyển đổi thư mục bỏ qua cũng được áp dụng cho các thư mục đích. Tôi đã chạy robocopy với /MIRvà thay đổi thư mục nguồn, và thư mục đích của tôi được cập nhật như mong đợi. Sau đó, tôi nhận thấy tôi có các thư mục lưu trữ mà tôi không muốn, vì vậy tôi đã thêm /XD archive, nhưng thư mục đích của tôi vẫn có các thư mục lưu trữ trong đó!

Sau khi làm rối với các ký tự đại diện và bao gồm / loại trừ \s, cuối cùng tôi đã thử xóa thư mục đích và chạy lại tập lệnh - lần này nó không có các thư mục lưu trữ! Đây là lệnh tôi đang chạy, với tên thư mục được thay đổi để bảo vệ người vô tội:

robocopy \\SERVER\Some\Folder\Path .\Some\Relative\Path /Copy:DAT /Mir /R:0 /W:1 /XD archive*

0

Tôi xin lỗi, nhưng theo tài liệu tại https://docs.microsoft.com/en-us/windows-server/adftime/windows-commands/robocopy :

/ xf <FileName> [...] Loại trừ các tệp khớp với tên hoặc đường dẫn đã chỉ định. Lưu ý rằng Tên tệp có thể bao gồm các ký tự đại diện (* và?).
/ xd <Directory> [...] Không bao gồm các thư mục khớp với tên và đường dẫn đã chỉ định.

Vì vậy, điều này có nghĩa là ký tự đại diện có thể được sử dụng trong cờ / xf nhưng không phải trong cờ / xd.

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.