Powershell格式范围和排序

时间:2016-06-07 18:55:59

标签: sorting powershell get-childitem

我想在Powershell中做的一件事是:

Set-Location 'C:\Windows\System32\WindowsPowerShell\v1.0\en-US\'
Get-ChildItem *.txt | Format-Wide -Column 3

这让我对所有要学习和探索的东西有了很好的了解。困扰我的是排序,因为现在我有3列以'A'开头。当我(例如)一列有A-J,一列L-R,一列来自R-Z时,它会更具可读性。这让我非常困扰,我写了一个函数来做到这一点:

Function PSHELP {    
    Set-Location 'C:\Windows\System32\WindowsPowerShell\v1.0\en-US\'

    #Initialize variables
    $files = gci *.txt | select name
    $count = $files.count
    $remainder = $count % 3
    $rows = ($count - $remainder) /3 -as [int]

    #I add an extra row by default, to deal with remainders
    $rows++
    $Table = New-Object 'object[,]' $rows,3


    #Build up a table the way I want to see it
    #column 1: A,B,C...
    #column 2: L,M,N..
    #column 3: R,...,Z

    $index = 0
    for ($j = 0; $j -lt 3; $j++)
    {   
        $ThisColumnLength = $rows
        if($j -ge $remainder){
            $ThisColumnLength--
        }

        for ($i = 0; $i -lt $ThisColumnLength; $i++)
        { 
            $table[$i,$j] = $files[$index]
            $index++
        }        
    }

    #Read the table in the order Format-Wide throws them on the screen
    #And store this in an array
    $array = @()
    for ($i = 0; $i -lt $rows; $i++)
    {   $ThisRowLength = 3

        if(($i+1) -eq $Rows){
            $ThisRowLength = $remainder
        }

        if ($ThisRowLength -gt 0){
            for ($j = 0; $j -lt $ThisRowLength; $j++)
            { 
                $array += $table[$i,$j]
            }
        }
    }

    $array | fw -Column 3
}

在PowerShell中有更多“标准”方法吗?对我来说这似乎是一个很自然的选择,但我找不到它。是否有我错过的选项或命令?

澄清:我不是在寻找寻求帮助的方法。这个问题是关于Format-Wide命令和/或可能的替代方案。我只是觉得这是一个很好的例子。

[编辑:]将我的功能改为稍微不那么笨拙的东西。

[编辑2:]我发布的代码存在缺陷,现在已经很晚了。如果将其粘贴到shell中并将其与{Get-Childitem * .txt |进行比较format-wide -column 3}',你应该能够看到我在这里尝试做什么。我希望有人能提出某种替代方案。

[编辑3:]再次修改代码,终于搞定了。在这个过程中,我发现了一个关于Format-Wide返回的非常有趣的事情:

PS> (GET-ChildItem).Count之间 结果:125

PS> (Get-ChildItem | Format-Wide).count 结果:129

这让我很困惑,因为有时候我会计算结果而没有得到我的预期,所以有几次我认为我的代码出了问题,但也许一切都很好。

2 个答案:

答案 0 :(得分:0)

如果您指的是在PowerShell中查找所有帮助文件的标准方法,那么是:

Get-Help * -Category HelpFile

除此之外,我只需在Technet上查看此页面:Windows PowerShell Core About Topics

答案 1 :(得分:0)

我找到的东西完全符合我的要求,而且更通用: http://www.leporelo.eu/blog.aspx?id=powershell-formatting-format-wide-rotated-to-format-columns

我仍然感到惊讶Powershell没有内置选项来执行此操作。