0

我有一个目录,其子目录都是数字:

./2856
./2357
./10198

等等。

我正在尝试编写一个 Powershell 脚本,该脚本将返回小于 X 的最大子目录名称。

所以在这个例子中,对于输入 3000,它应该返回 2856。

然而,到目前为止我写的东西对我来说看起来麻烦,我想知道如何缩短它:

Get-ChildItem "$path" ` 
| ?{ $_.PSIsContainer } `
| Select-Object @{Name="AsInt"; Expression={[int]$_.Name}} `
| Select-Object -expand AsInt `
| ?{$_ -lt [int]$lessThanNumber} `
| measure-object -max `
| Select-Object -expand Maximum
4

5 回答 5

1

另一个(v3)示例。仅传递包含数字的目录名称,并且Invoke-Expressioncmdlet 用于将名称评估为数字(不需要显式转换)

$x = 3000

Get-ChildItem -Directory | Where-Object {
    $_.Name -notmatch '\D' -and (Invoke-Expression $_.Name) -lt $x
} | Sort-Object | Select-Object -Last 1
于 2013-10-15T08:06:45.733 回答
1

如果您有 V3:

@(Get-ChildItem -Path $Path -Directory -Name |
ForEach-Object {$_ -as [int]}) -lt $LessThanNumber |
sort | select -last 1
于 2013-10-14T19:52:44.600 回答
1

使用 PowerShell v3:

Get-ChildItem $path -dir | Select *,@{n='Number';e={[int]$_.Name}} | 
    Where Number -lt $lessThanNumber | Sort Number | Select -Last 1
于 2013-10-14T19:55:48.063 回答
1

你可以试试 :

Get-ChildItem "$path" | Where-Object {$_.PSIsContainer -and [int]$_.name -le 3000} `
 | Sort-Object -Property @{exp={[int]$_.name}} `
 | Select-Object -Last 1

你可以这样写:

Get-ChildItem "$path" | ? {$_.PSIsContainer -and [int]$_.name -le 3000} `
 | Sort -Property @{exp={[int]$_.name}} `
 | Select -Last 1

如果您想避免由于这些不是整数的目录名称而导致的错误:

Get-ChildItem "$path" | ? {$_.PSIsContainer -and ($_.name -as [int]) -le 3000} `
  | Sort -Property @{exp={$_.name -as [int]}} `
  | Select -Last 1
于 2013-10-14T19:31:58.317 回答
1

我用 PowerShell v3 试过这个:

$max = 3000
$cur = 0

ls -d | %{
    # Potential for issues if the directory name cannot be cast to [int]
    $name = ([int]$_.Name)
    if (($name -gt $cur) -and ($name -le $max)) {
        $cur = $name
    }
}

(最后 $cur = 2856)

于 2013-10-14T19:33:04.040 回答