14

これは変かもしれませんが、私と一緒にいてください。変数に割り当てられるパイプされた結果の最後の要素のみを取得したい。もちろん、「通常の」コードでこれを行う方法は知っていますが、これはワンライナーでなければならないためです。

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

これは文字列展開内で行われるため、適切なコードがわかりません。

現在、私は最後の 3 ハールを取得していますが、それは本当に厄介です。

New-Object PSObject -Property @{ 
LastWriteTime = [DateTime]::ParseExact($tempDate, "MMM dd HH:mm",[System.Globalization.CultureInfo]::InvariantCulture)
Type = $(if([int]$tempSize) -eq 0) { "ディレクトリ" } else { $tempName.SubString($tempName.length-3,3) })
名前 = $tempName
サイズ = [int]$tempSize
}

私の考えは似たようなことをしていました

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

つまり、すべてを繰り返しますが、見ている要素が入力配列の最後の要素である場所だけを取り出します。

何が欠けていますか?

4

2 に答える 2

23

これを行ういくつかの方法:

$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('.')
于 2010-12-28T16:49:23.097 に答える
9

一般に、パイプラインの最後の要素を取得するには、Select -Last 1Roman が上記で提案したように使用します。ただし、入力が単純​​な配列である場合にこれを行う別の簡単な方法は、配列スライスを使用することです。

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

ファイルの拡張子またはベース名を取得するつもりでしたか? Typeプロパティにはファイル名の拡張子が既に含まれて いるようです。

于 2010-12-30T18:55:26.137 に答える