2010-12-28 24 views
8

これは奇妙なかもしれませんが、私と一緒に滞在します。 パイプライン化された結果の最後の要素だけをvaraiableに割り当てる必要があります。 私はこれを「通常の」コードでどうやって行うのか知っていますが、これは1ライナーでなければならないからです。powershellのパイプラインの最後の要素を取得

具体的には、FTPリクエストの結果を取得するときにファイル拡張子を取得することに興味がありますListDirectoryDetails

これは文字列展開内で行われるため、適切なコードを見つけることができません。

現在、私は最後の3ハースを手に入れていますが、それは本当に厄介です。私の考えは

ある

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

に似た何かをやっていた

 
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
}

、以上のすべての反復が、私が見てい要素が最後の1であるところだけ取り出し入力配列。

私には何が欠けていますか?これを行うには

答えて

16

、いくつかの方法:一般的に

$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

、パイプラインの最後の要素を取得するには、ローマは、上記のとおりSelect -Last 1を使用して行われることになります。しかし、別の入力は単純な配列は、例えばスライス配列を使用することであるならば、これを行うための簡単な方法:

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

は、ファイルの拡張子やベース名を得るためにあなたの意思ましたか? Typeプロパティには既にファイル名の拡張子が含まれているようです。

関連する問題