Одна из вещей, которые мне нравится делать в Powershell:
Set-Location 'C:\Windows\System32\WindowsPowerShell\v1.0\en-US\'
Get-ChildItem *.txt | Format-Wide -Column 3
Это дает мне прекрасный обзор всего, что нужно изучить и изучить. Что меня беспокоило, так это сортировка, потому что теперь у меня есть 3 столбца, которые начинаются с «А». Было бы более читаемо, если бы у меня был (например) один столбец с 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 и/или возможной альтернативы. Я просто подумал, что это будет хороший пример.
[Редактировать:] Изменил мою функцию на что-то менее громоздкое.
[Edit2:] Код, который я опубликовал, ошибочен, и уже поздно. Если вставить его в оболочку и сравнить с {Get-Childitem *.txt | format-wide -column 3}', вы сможете увидеть, что я пытаюсь здесь сделать. Я надеюсь, что кто-то может предложить какую-то альтернативу.
[Edit3:] Снова изменил код, наконец, это заработало. В процессе я узнал очень интересную вещь о том, что возвращает Format-Wide:
PS> (Get-ChildItem).count Результат: 125
PS> (Get-ChildItem | Format-Wide).count Результат: 129
Меня это сильно смутило, потому что иногда я считал результаты и получал не то, что ожидал, поэтому пару раз я думал, что с моим кодом что-то не так, но, возможно, все было в порядке.