从Powershell中的列表中选择最后一项

时间:2013-08-02 14:04:20

标签: list sorting powershell

我正在尝试使用这行代码映射一个驱动器号,这将为我提供从d到z可用的驱动器列表。

ls function:[d-z]: -n|?{!(test-path $_)}

我想从列表中选择最后一个字母,而不是随机字母。我该怎么做呢? Powershell的新手,感谢您的帮助。

6 个答案:

答案 0 :(得分:24)

您可以在该管道的末尾使用Select-Object -Last 1

答案 1 :(得分:5)

如果你想要更详细,但(在我看来)可读性改进版本:

# Get all drives which are used (unavailable)
# Filter for the "Name" property ==> Drive letter
$Drives = (Get-PSDrive -PSProvider FileSystem).Name

# Create an array of D to Z
# Haven't found a more elegant version...
$Letters = [char[]]([char]'D'..[char]'Z')

# Filter out, which $Letters are not in $Drives (<=)
# Again, filter for their letter
$Available = (Compare-Object -ReferenceObject $Letters -DifferenceObject $Drives | Where {$_.SideIndicator -eq "<="}).InputObject

# Get the last letter
$LastLetter = $Available[-1]

答案 2 :(得分:3)

您可以仅从列表的末尾开始并向上移动。

最后一项:$array[-1] 倒数第二位:$array[-2] 等等。

答案 3 :(得分:2)

试试这个:

ls function:[d-z]: -n|?{!(test-path $_)} | Select-Object -Last 1

答案 4 :(得分:2)

另一个不需要尝试D-Z所有路径的选项是解析Get-Psdrive。这是一个例子:

$lettersInUse = Get-Psdrive | ? { $_.Name.Length -eq 1 } | % { $_.Name }
$lastDriveLetter = [Char]'Z'
while ($lettersInUse -contains $lastDriveLetter) {
  $lastDriveLetter = [Char]($lastDriveLetter - 1)
}
$lastDriveLetter

答案 5 :(得分:0)

  1. 如果是数组
    $ newArray = @(git标签--list)
    $ lastmember = $ newArray [$ newArray.Count – 1]

  2. 如果您有列表
    $ newArray |选择对象-最后1个