【问题标题】:Get last element of pipeline in powershell在powershell中获取管道的最后一个元素
【发布时间】:2010-12-28 13:55:32
【问题描述】:

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

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

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

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

新对象 PSObject -Property @{
LastWriteTime = [DateTime]::ParseExact($tempDate, "MMM dd HH:mm",[System.Globalization.CultureInfo]::InvariantCulture)
类型 = $(if([int]$tempSize -eq 0) { "目录" } else { $tempName.SubString($tempName.length-3,3) })
名称 = $tempName
大小 = [int]$tempSize
}

我的想法是做类似的事情

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

也就是说,遍历所有元素,但只取出我正在查看的元素是输入数组的最后一个。

我错过了什么?

【问题讨论】:

    标签: powershell pipeline


    【解决方案1】:

    有几种方法可以做到这一点:

    $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('.')
    

    【讨论】:

      【解决方案2】:

      一般来说,获取管道中的最后一个元素将使用Select -Last 1 完成,正如上面 Roman 所建议的那样。但是,如果输入是一个简单的数组,另一种更简单的方法是使用数组切片,例如:

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 2015-12-07
        • 2010-11-04
        相关资源
        最近更新 更多