2010-12-28 25 views
8

yılında boru hattının son öğe alın, ama benimle kal. Sadece bir varaiable atanacak bir piped sonucun son elemanı almak istiyorum. bu tek liner olması gerektiğinden ben tabii "normal" kodunu bunun nasıl biliyorum ama.Bu Garip olabilir powershell

Daha spesifik olarak, ben bir FTP isteği ListDirectoryDetails den sonucu alınırken dosya uzantısını almak ilgileniyorum. Bu bir dize genişleme içinde yapılır yana

, düzgün kod çözemiyorum.

Şu anda son 3 Hars alıyorum, ama gerçek pis olduğunu. Benim fikrim

olduğunu

 
    $tempName.Split(".") | ? {$_ -eq $input[$input.Length-1]}

benzer bir şey yapıyordu

 
New-Object PSObject -Property @{
LastWriteTime = [DateTime]::ParseExact($tempDate, "MMM dd HH:mm",[System.Globalization.CultureInfo]::InvariantCulture)
Type = $(if([int]$tempSize -eq 0) { "Directory" } else { $tempName.SubString($tempName.length-3,3) })
Name = $tempName
Size = [int]$tempSize
}

, yerinden yineleme ama bakıyorum eleman sonuncusu yerini sadece çıkar giriş dizisi.

Neyi eksik? Bunu yapmak için

cevap

16

bazı yollar: Genel olarak

$name = 'c:\temp\aaa.bbb.ccc' 

# way 1 
$name.Split('.') | Select-Object -Last 1 

# way 2 
[System.IO.Path]::GetExtension($name) 

# or if the dot is not needed 
[System.IO.Path]::GetExtension($name).TrimStart('.') 
9

, boru hattında son öğe alma Roman yukarıda anlaşılacağı gibi Select -Last 1 kullanılarak yapılırdı. giriş basit bir dizi dizi dilimleme ör .:

PS> $name = "c:\temp\aaa.bbb.txt" 
PS> $name.Split('.')[-1] 
txt 

dosyanın uzantısı veya basename almak için niyet oldu kullanmaktır Ancak, eğer alternatif ve daha kolay bir yolu bunu yapmak için? Çünkü, Type özelliğinin dosya adı uzantısını zaten içerdiği anlaşılıyor.