Pengecualian direktori wildcard dengan robocopy - case aneh

16

Saya perlu mendapatkan robocopy untuk mengecualikan file apa pun yang jalurnya berisi direktori dengan nama tertentu. Misalnya, "bilah":

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

harus dikecualikan, tetapi tidak

c:\foo\barf\b.txt

Berikut adalah hal-hal yang saya coba - masing-masing ditolak oleh robocopy:

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

Ada ide?

Jesse
sumber

Jawaban:

18

Ternyata / XD cocok dengan nama direktori - bukan path lengkap. Jadi Anda sebenarnya tidak perlu khawatir tentang mencocokkan garis miring terbalik.

Jadi untuk mengecualikan direktori (di mana saja di jalan) yang disebut "bar", bar sederhana / XD akan bekerja. Jika Anda ingin mengecualikan "barf", Anda juga dapat menggunakan / XD bar *.

Terkadang jawabannya lebih sederhana dari yang Anda pikirkan.

Jesse
sumber
4

Bagian dari kegagalan menggunakan trailing \ di Robocopy ketika merujuk ke direktori - yang merupakan no-no - karena Robocopy mencoba menafsirkannya sebagai karakter pelarian. Hampir semua orang melakukan kesalahan ini dengan Robocopy. Dengan mengingat hal itu, contoh ini akan berfungsi:

/XD "\Bar"

Jika Anda ingin mencocokkan struktur folder yang lebih spesifik (agar tidak cocok dengan subfolder lainnya, Anda dapat menambahkan lebih detail, seperti:

/XD "\Foo\Bar"
/XD "C:\Foo\Bar"
Micheal Espinola
sumber
2
Pengecualian wildcard tidak berfungsi. Robocopy akan melempar kesalahan jika Anda mencoba. Apakah Anda menguji contoh Anda?
user1751825
Saya melakukannya dan menggunakannya, kecuali fakta bahwa saya keliru menambahkan tanda bintang pada contoh saya, yang saya pikir saya membingungkan sintaksis dengan sakelar / XF. Saya telah mengoreksi respons saya. Terima kasih.
Micheal Espinola
1

Jika Anda mencoba berbagai direktori filter, pastikan untuk menghapus folder tujuan Anda di antara perubahan!

Gotcha bagi saya adalah bahwa saya tidak menyadari saklar direktori abaikan juga diterapkan ke folder tujuan. Saya telah menjalankan robocopy dengan /MIRdan mengubah direktori sumber, dan direktori tujuan saya diperbarui seperti yang diharapkan. Kemudian saya perhatikan saya memiliki folder arsip yang tidak saya inginkan, jadi saya menambahkan /XD archive, tetapi folder tujuan saya masih memiliki folder arsip di dalamnya!

Setelah mengacaukan wildcard dan termasuk / tidak termasuk \s, saya akhirnya mencoba menghapus folder tujuan dan menjalankan kembali skrip - kali ini tidak memiliki folder arsip! Ini adalah perintah yang saya jalankan, dengan nama direktori yang diubah untuk melindungi yang tidak bersalah:

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

Maaf, tetapi menurut dokumentasi di https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy :

/ xf <FileName> [...] Tidak termasuk file yang cocok dengan nama atau jalur yang ditentukan. Perhatikan bahwa FileName dapat menyertakan karakter wildcard (* dan?).
/ xd <Direktori> [...] Tidak termasuk direktori yang cocok dengan nama dan jalur yang ditentukan.

Jadi ini secara khusus berarti wildcard dapat digunakan di flag / xf tetapi tidak di flag / xd.

Peter
sumber