PowerShell'de bir adlandırma komut dosyası oluşturmakta oldukça sorun yaşıyorum. durum: "dört basamak - metin - önemsiz" Ben için adlandırmak istiyorum "metni (dört haneli)" Şu anda ben yarattıkPowerShell regex gruplandırması
: Ben aşağıdaki biçimde adında klasörler bir dizinde bazı örnek adlarını içeren bir dizin uğraşmak: - ilginç bir şey - berbat bir şey
2006 -
1996 bu kopya - yankı için bir komut dosyası kurma denedim
görmezden onların ile başlayan isimler, ancak normal ifadenin asıldığını alamıyorum. Aşağıdaki kod sadece baskılar "1996 - şey" ve "2006 - copy"
Get-ChildItem | Foreach-Object { if ($_.BaseName -match "(\d{4} - \w+ -*)") { echo $matches[0]}}
ve yazdırır bu bir "1996 - ilginç bir şey - şey berbat \ n()" ve "2006 - Bu kopya - görmezden \ 'eşleştirme için bir sınır olarak - n()"
Get-ChildItem | Foreach-Object { echo ($_.BaseName -replace "(\d{4} - \w+ - *)"), "$2 ($1)"}
birisi ne yaklaşım literal dize saygı neden bana söyleyebilir?' bundan önce sonunda boşluk kırpmak etmektir -
Get-ChildItem | Foreach-Object {
if ($_.BaseName -match "(\d{4} - [^-]*)") {
echo $matches[0].TrimEnd()
}
}
Not TrimEnd:
* DÜZENLEME * Teşekkür zespri, sorunumu çözdü kod
Get-ChildItem | Foreach-Object {
if ($_.BaseName -match "(\d{4} - [^-]*)") {
Rename-Item $_ ($_.BaseName -replace "(\d{4}) - (.+)(?= -).*" ,'$2 ($1)')
}
}
evet maç olanların isimlerini yankılanacak, bunda bir adım Doğru yön. Şimdi onunla bir şeyler yapmak için: "ilginç bir şey (rakamlar)" için yeniden biçimlendirin. Ayırmak istediğim iki parçayı parantez içinde sarmayı ve $ eşleşmeleriyle çıkarmayı denedim [0] .Gruplar [] la http://stackoverflow.com/questions/614651/how-do-you-extract-the -value-of-a-regex-backreference-in-powershell ile eşleşen, ancak geçerli bir operatör değil.Ayrıca adlandırılmış ve adlandırılmamış grupları kendi aralarında yapmaya çalıştım, ancak tüm metinden veya boş bir çift parantezden başka bir şey alamıyorum. – Glader
@Glader: Doğru yönde yumuşak bir dürtünün yeterli olacağını umuyordum. İsimleri yeniden biçimlendiren kodu eklemek için cevabı değiştirdim. –
Öyleyse, ama ben hayatımın doğru yöntemini anlayamadım ... ilk regex'e birden fazla ya da çok sayıda istekte bulunarak çalıştı ama her zaman kıçımda bir şeyler ısırdı. ^^ Çok teşekkür ederim, orijinal gönderiyi gittiğim kodla güncelledim. – Glader