C: \ 'deki klasörleri adında' og 'ile arayan aşağıdaki Powershell betiğini göz önünde bulundurun:
PS C: \> (ls |% {$ _. Name} |? {$ _. İçeriyor ("og")}) PerfLogs Program dosyaları setup.log
Şimdi tek bir öğeyi almak için aramayı daraltıyorum:
PS C: \> (ls |% {$ _. Name} |? {$ _. İçeriyor ("Prog")}) Program dosyaları
Garip olan, ilk işlemin bir dizi vermesi, ikinci işlemin (ki IMHO semantik olarak aynı işlem olduğu için, aynı sonuç sonucunu vermesi gerekir) bir dizi vermesidir . Bu aşağıdaki sonuçta görülebilir:
PS C: \> (ls |% {$ _. Ad} |? {$ _. İçeriyor ("og")}). Uzunluk 3 PS C: \> (ls |% {$ _. Name} |? {$ _. İçeriyor ("Prog")}). Uzunluk 13
Bu çok rahatsız edici olabilir, çünkü görünüşe göre 'og' ile eşleşen, 'Prog' ile eşleşen klasörlerden daha az klasör var.
Açıkçası, PowerShell tek bir nesneye diziyi tek bir nesneye dolaylı olarak 'kutusundan çıkardı' ve hiçbir zaman bir uzunluk dizisi elde etmiyoruz. m bir dizi ile ilgilenip ilgilenmiyor.
Bunun olmasını nasıl önleyebilirim? Nasıl anlaştın onunla birlikte?
$_.Contains
, o zaman%{,,$_.Name}
çalışır ...