14

这可能很奇怪,但请留在我身边。我只想将管道结果的最后一个元素分配给变量。我当然知道如何在“常规”代码中执行此操作,但是因为这必须是单行的。

更具体地说,我有兴趣在从 FTP 请求中获取结果时获取文件扩展名ListDirectoryDetails

由于这是在字符串扩展中完成的,因此我无法找出正确的代码。

目前我正在获得最后 3 个 hars,但这真的很讨厌。

新对象 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 1按照 Roman 上面的建议完成。但是,如果输入是简单数组,另一种更简单的方法是使用数组切片,例如:

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

您是否打算获取文件的扩展名或基本名称?因为似乎该Type属性已经包含文件名的扩展名。

于 2010-12-30T18:55:26.137 回答