2010-12-28 3 views
8

Это может быть странно, но оставайтесь со мной. Я хочу получить только последний элемент результата, который будет передан в varayable. Я знаю, как это сделать в «правильном» коде, конечно, но так как это должен быть однострочный.Получить последний элемент трубопровода в powershell

Более конкретно, меня интересует получение расширения файла при получении результата по запросу FTP ListDirectoryDetails.

Поскольку это сделано в расширении строки, я не могу определить правильный код.

В настоящее время я получаю последние 3 hars, но это реально противно.

 
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
}

Моя идея была сделать что-то похожее на

 
    $tempName.Split(".") | ? {$_ -eq $input[$input.Length-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 уже содержит расширение для имени файла.

Смежные вопросы