20

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

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

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

4

6 回答 6

38

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

于 2013-08-02T14:11:52.837 回答
9

如果您寻找更冗长但(在我看来)可读性改进的版本:

# 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]
于 2013-08-02T14:35:50.920 回答
6

你可以从列表的后面开始,然后往上走。

最后一项:倒数$array[-1] 第二项:$array[-2] 以此类推。

于 2020-06-05T19:45:10.107 回答
3

尝试这个:

ls function:[d-z]: -n|?{!(test-path $_)} | Select-Object -Last 1
于 2013-08-02T14:14:11.647 回答
2

另一个不需要尝试来自 DZ 的所有路径的选项是解析Get-Psdrive. 这是一个例子:

$lettersInUse = Get-Psdrive | ? { $_.Name.Length -eq 1 } | % { $_.Name }
$lastDriveLetter = [Char]'Z'
while ($lettersInUse -contains $lastDriveLetter) {
  $lastDriveLetter = [Char]($lastDriveLetter - 1)
}
$lastDriveLetter
于 2013-08-02T14:20:32.487 回答
1
  1. 如果是数组
    $newArray = @(git tag --list)
    $lastmember = $newArray[$newArray.Count – 1]

  2. 如果你有 list
    $newArray | 选择对象-Last 1

于 2020-05-12T15:25:49.993 回答