我想在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
这让我很困惑,因为有时候我会计算结果而没有得到我的预期,所以有几次我认为我的代码出了问题,但也许一切都很好。
答案 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没有内置选项来执行此操作。