Bu kurallar bir Vista makinesinde yapılan kapsamlı testlerden sonra keşfedildi. Dosya adlarında unicode ile test yapılmamıştır.
RENAME, 2 parametre gerektirir - bir sourceMask, ardından bir targetMask. Hem sourceMask hem de targetMask, *
ve / veya ?
joker karakterler içerebilir . Joker karakterlerin davranışı, kaynak ve hedef maskeler arasında biraz değişir.
Not - REN bir klasörü yeniden adlandırmak için kullanılabilir, ancak joker edilir değil bir klasörü yeniden adlandırma zaman sourceMask veya targetMask Ya izin verdi. SourceMask en az bir dosyayla eşleşiyorsa, dosya (lar) yeniden adlandırılacak ve klasörler göz ardı edilecektir. SourceMask yalnızca dosyalarla değil, dosyalarla eşleşiyorsa, kaynakta veya hedefte joker karakterler belirirse sözdizimi hatası oluşur. SourceMask hiçbir şeyle eşleşmezse, "dosya bulunamadı" hatasıyla sonuçlanır.
Ayrıca, dosyaları yeniden adlandırırken joker karakterlere yalnızca sourceMask dosyasının dosya adı bölümünde izin verilir. Dosya adına giden yolda joker karakterlere izin verilmez.
sourceMask
SourceMask, hangi dosyaların yeniden adlandırıldığını belirlemek için bir filtre olarak çalışır. Joker karakterler burada dosya adlarını filtreleyen diğer komutlarla aynı şekilde çalışır.
?
- 0 veya 1 karakter hariç herhangi bir karakterle eşleşir .
Bu joker karakter açgözlüdür - bir değilse, her zaman bir sonraki karakteri kullanır. .
Ancak, adın sonunda veya bir sonraki karakter bir.
*
- Aşağıdakiler de dahil olmak üzere, 0 veya daha fazla karakterle eşleşir.
(aşağıda bir istisna dışında). Bu joker açgözlü değildir. Sonraki karakterlerin eşleşmesini sağlamak için gerektiği kadar az veya gerektiği kadar eşleşir.
Tüm joker karakter olmayan karakterler, birkaç özel durum istisnasıyla kendileriyle eşleşmelidir.
.
- Başka karakter kalmazsa, kendisi ile eşleşir veya adın sonu (hiçbir şey) ile eşleşebilir. (Not - geçerli bir Windows adı ile bitemez .
)
{space}
- Başka karakter kalmazsa, kendisi ile eşleşir veya adın sonu (hiçbir şey) ile eşleşebilir. (Not - geçerli bir Windows adı ile bitemez {space}
)
*.
sonunda - herhangi 0 veya daha fazla karakter eşleşir hariç .
sonlandıran .
aslında herhangi bir kombinasyonu olabilir .
ve {space}
sürece maskeli en son karakter olarak .
bu ilk ve tek istisnası *
sadece herhangi bir karakter grubuyla eşleşmiyor.
Yukarıdaki kurallar o kadar da karmaşık değil. Ancak durumu kafa karıştırıcı yapan çok önemli bir kural daha var: sourceMask hem uzun hem de kısa 8.3 isimleriyle (eğer varsa) karşılaştırılır. Bu son kural, sonuçların yorumlanmasını çok zorlaştırabilir, çünkü maskenin kısa adla eşleşmesi her zaman açık değildir.
NTFS birimlerinde kısa 8.3 ad oluşturmayı devre dışı bırakmak için RegEdit kullanmak mümkündür; bu noktada dosya maskesi sonuçlarının yorumlanması çok daha ileri düzeydedir. Kısa isimleri devre dışı bırakmadan önce oluşturulan kısa isimler kalacaktır.
targetMask
Not - Çok sıkı bir test yapmadım, ancak aynı kuralların COPY komutunun hedef adı için de geçerli olduğu anlaşılıyor.
TargetMask yeni adı belirtir. Her zaman tam uzun isme uygulanır; TargetMask, sourceMask kısa 8.3 ismine uysa bile, hiçbir zaman kısa 8.3 ismine uygulanmaz.
SourceMask'ta bulunan joker karakterlerin varlığı veya yokluğu, joker karakterlerin targetMask'ta nasıl işlendiğini etkilemez.
Aşağıdaki tartışmada - c
herhangi bir karakter temsil etmesidir değil *
, ?
ya da.
TargetMask, kaynak ismine karşı kesinlikle soldan sağa, geri izleme olmaksızın işlenir.
c
- Bir sonraki karakter olmadığı .
ve c
hedef adına eklendiği sürece kaynak ad içindeki konumu ilerletir . (Kaynaktaki karakteri değiştirir c
, ancak hiçbir zaman değiştirmez .
)
?
- Kaynak uzun ismin bir sonraki karakteriyle eşleşir ve bir sonraki karakter olmadığı sürece hedef ismine eklenir. .
Bir sonraki karakter .
varsa veya kaynak adın sonundaysa sonuç ve geçerli karaktere hiçbir karakter eklenmez. kaynak adındaki konum değişmedi.
*
targetMask sonundaki - Kalan tüm karakterleri kaynaktan hedefe ekler. Zaten kaynak sonunda ise, o zaman hiçbir şey yapmaz.
*c
- Tüm kaynak karakterleri geçerli konumdan son c
durumuna (büyük / küçük harfe duyarlı açgözlü eşleşme) kadar eşleştirir ve eşleşen karakter kümesini hedef adına ekler. Eğer c
bulunmazsa tarafından, daha sonra kaynağından kalan bütün karakterler, eklenen takip edilmekte c
Bu benim Windows dosya desen eşleştirme küçük harf duyarlı olduğu farkındayım tek durumdur.
*.
- Tüm kaynak karakterleri geçerli konumdan son açılımına .
(açgözlü eşleşme) kadar eşleştirir ve eşleşen karakter kümesini hedef adına ekler. Eğer .
bulunmazsa, o zaman kaynağından kalan bütün karakterler eklenmiş izlemektedir.
*?
- Kalan tüm karakterleri kaynaktan hedefe ekler. Zaten kaynak sonunda ise o zaman hiçbir şey yapmaz.
.
*
Önde olmadan - Herhangi bir karakter kopyalamadan ilk oluşumu gerçekleştirerek kaynaktaki konumunu yükseltir ve hedef adına .
eklenir .
. Eğer .
kaynakta bulunmazsa, o zaman kaynağının sona ulaşana ve ekler .
hedef adının.
TargetMask yorulduktan sonra, izlenen herhangi bir iz .
ve {space}
sonuçta elde edilen hedef adının sonunda kesilir, çünkü Windows dosya adları .
veya{space}
Bazı pratik örnekler
Herhangi bir uzantıdan önce 1. ve 3. konumlardaki bir karakteri değiştirin (henüz mevcut değilse, 2. veya 3. karakteri ekler)
ren * A?Z*
1 -> AZ
12 -> A2Z
1.txt -> AZ.txt
12.txt -> A2Z.txt
123 -> A2Z
123.txt -> A2Z.txt
1234 -> A2Z4
1234.txt -> A2Z4.txt
Her dosyanın (final) uzantısını değiştirin
ren * *.txt
a -> a.txt
b.dat -> b.txt
c.x.y -> c.x.txt
Her dosyaya bir eklenti ekle
ren * *?.bak
a -> a.bak
b.dat -> b.dat.bak
c.x.y -> c.x.y.bak
İlk uzantıdan sonra kalan tüm uzantıları kaldırın. ?
Mevcut tam adı ve ilk uzantıyı korumak için yeterli kullanılması gerektiğini unutmayın .
ren * ?????.?????
a -> a
a.b -> a.b
a.b.c -> a.b
part1.part2.part3 -> part1.part2
123456.123456.123456 -> 12345.12345 (note truncated name and extension because not enough `?` were used)
Yukarıdakiyle aynıdır, ancak 5 karakterden daha uzun bir ad ve / veya uzantıya sahip dosyaları kesilmeleri için filtreleyin. (Açıkça, ?
6 karaktere kadar ad ve uzantıları korumak için targetMask'ın her iki ucuna da ek bir değer ekleyebilir )
ren ?????.?????.* ?????.?????
a -> a
a.b -> a.b
a.b.c -> a.b
part1.part2.part3 -> part1.part2
123456.123456.123456 (Not renamed because doesn't match sourceMask)
Soyadından sonra karakterleri değiştir _
ve uzantıyı korumaya çalış. (Uzantıda _
görünüyorsa düzgün çalışmıyor )
ren *_* *_NEW.*
abcd_12345.txt -> abcd_NEW.txt
abc_newt_1.dat -> abc_newt_NEW.dat
abcdef.jpg (Not renamed because doesn't match sourceMask)
abcd_123.a_b -> abcd_123.a_NEW (not desired, but no simple RENAME form will work in this case)
Herhangi bir ad, .
Karakterler tarafından sınırlandırılmış bileşenlere ayrılabilir , ancak her bileşenin sonuna eklenebilir veya silinebilir. Kalan karakterleri joker karakterlerle korurken, bir bileşenin başına veya ortasına karakterler silinemez veya eklenemez. Yerine herhangi bir yerde değişiklik yapılabilir.
ren ??????.??????.?????? ?x.????999.*rForTheCourse
part1.part2 -> px.part999.rForTheCourse
part1.part2.part3 -> px.part999.parForTheCourse
part1.part2.part3.part4 (Not renamed because doesn't match sourceMask)
a.b.c -> ax.b999.crForTheCourse
a.b.CarPart3BEER -> ax.b999.CarParForTheCourse
Kısa isimler etkinleştirilirse, isim için en az 8 , uzantı için ?
en az 3 ?
olan bir sourceMask tüm dosyalar ile eşleşecektir çünkü daima kısa 8.3 adı ile eşleşecektir.
ren ????????.??? ?x.????999.*rForTheCourse
part1.part2.part3.part4 -> px.part999.part3.parForTheCourse
Faydalı tuhaflık / böcek? ad öneklerini silmek için
Bu SuperUser gönderisi , /
baş karakterleri bir dosya adından silmek için bir dizi eğik çizginin ( ) nasıl kullanılabileceğini açıklar . Silinecek her karakter için bir eğik çizgi gerekir. Bir Windows 10 makinesindeki davranışı onayladım.
ren "abc-*.txt" "////*.txt"
abc-123.txt --> 123.txt
abc-HelloWorld.txt --> HelloWorld.txt
Bu teknik yalnızca hem kaynak hem de hedef maskeleri çift tırnak içine alınmışsa çalışır. Gerekli alıntılar olmadan aşağıdaki formların tümü bu hatayla başarısız olur:The syntax of the command is incorrect
REM - All of these forms fail with a syntax error.
ren abc-*.txt "////*.txt"
ren "abc-*.txt" ////*.txt
ren abc-*.txt ////*.txt
/
Bir dosya adı ortasında veya sonunda herhangi karakterleri kaldırmak için kullanılamaz. Yalnızca baştaki (önek) karakterleri kaldırabilir.
Teknik /
olarak bir joker olarak çalışmaz. Aksine basit bir karakter değiştirme işlemi gerçekleştirir, ancak değiştirme işleminden sonra, REN komutu bunun /
bir dosya adında geçerli olmadığını kabul eder ve /
baştaki eğik çizgileri addan çıkarır. REN, /
hedef adın ortasında tespit ederse sözdizimi hatası verir .
Olası RENAME hatası - tek bir komut aynı dosyayı iki kez yeniden adlandırabilir!
Boş bir test klasörüne başlamak:
C:\test>copy nul 123456789.123
1 file(s) copied.
C:\test>dir /x
Volume in drive C is OS
Volume Serial Number is EE2C-5A11
Directory of C:\test
09/15/2012 07:42 PM <DIR> .
09/15/2012 07:42 PM <DIR> ..
09/15/2012 07:42 PM 0 123456~1.123 123456789.123
1 File(s) 0 bytes
2 Dir(s) 327,237,562,368 bytes free
C:\test>ren *1* 2*3.?x
C:\test>dir /x
Volume in drive C is OS
Volume Serial Number is EE2C-5A11
Directory of C:\test
09/15/2012 07:42 PM <DIR> .
09/15/2012 07:42 PM <DIR> ..
09/15/2012 07:42 PM 0 223456~1.XX 223456789.123.xx
1 File(s) 0 bytes
2 Dir(s) 327,237,562,368 bytes free
REM Expected result = 223456789.123.x
SourceMask *1*
dosyasının ilk önce uzun dosya adıyla eşleştiğine ve dosyanın beklenen sonuç olarak yeniden adlandırıldığına inanıyorum 223456789.123.x
. RENAME daha sonra işlenecek daha fazla dosya aramaya devam eder ve yeni adlandırılmış dosyayı yeni kısa adıyla bulur 223456~1.X
. Daha sonra dosya nihai sonucunu vererek yeniden adlandırılır 223456789.123.xx
.
8.3 ad üretimini devre dışı bırakırsam, RENAME beklenen sonucu verir.
Bu tuhaf davranışı tetiklemek için mevcut olması gereken tüm tetikleyici koşulları tam olarak çözmedim. Hiç bitmeyen bir özyinelemeli RENAME yaratmanın mümkün olabileceğinden endişe duydum, ancak hiçbir zaman birisini teşvik edemedim.
Hatayı uyarmak için aşağıdakilerin hepsinin doğru olması gerektiğine inanıyorum. Gördüğüm her hatalı vaka aşağıdaki koşullara sahipti, ancak aşağıdaki koşulları sağlayan tüm vakalar tıkanmadı.
- Kısa 8.3 isim etkin olmalı
- SourceMask, orijinal uzun adla eşleşmelidir.
- İlk yeniden adlandırma, sourceMask ile de eşleşen kısa bir ad oluşturmalıdır.
- İlk yeniden adlandırılan kısa ad, orijinal kısa addan sonra sıralanmalıdır (varsa?)