Как написать список, отсортированный лексикографически в сетке по столбцам?

У меня есть результат Get-ChildItem , и я хочу перебрать их , и отображать их имена. По умолчанию, если я просто использую Write-Host , я получаю его в строке следующим образом:

PerfLogs  Program Files  Program Files (x86)  Python31  Temp  Users  Windows

Однако, скажите, что я знаю, что я хочу, чтобы он был разделен на x столбцов, вместо этого я хочу получить такой результат:

PerfLogs                  Python31     Windows
Program Files             Temp
Program Files (x86)       Users

Как вы можете видеть, он перечисляет его сначала по столбцам, а затем по горизонтали.

Любая идея, как получить такой вывод, как который? В идеале он должен использовать наибольшее количество столбцов, которое может поместиться на экране, с выравниванием имени по левому краю в каждом столбце.

ОБНОВЛЕНИЕ: благодаря Роману, теперь у меня есть вывод ls в стиле linux с цветами каталогов. На основе его обновленного сценария у меня есть:

function color-ls
{
    dir $args | Format-High -Print {    
        $item = $args
        $fore = $host.UI.RawUI.ForegroundColor        
        $host.UI.RawUI.ForegroundColor = .{     
            if ($item[1].psIsContainer) {'Blue'}
            elseif ($item[1].Extension -match '\.(exe|bat|cmd|ps1|psm1|vbs|rb|reg|dll|o|lib)') {'Red'}
            elseif ($item[1].Extension -match '\.(zip|tar|gz|rar)') {'Yellow'}
            elseif ($item[1].Extension -match '\.(py|pl|cs|rb|h|cpp)') {'Cyan'}
            elseif ($item[1].Extension -match '\.(txt|cfg|conf|ini|csv|log|xml)') {'Green'}
            else {$fore}
        }
        write-host $args[0] -NoNewLine
        $host.UI.RawUI.ForegroundColor = $fore
    }
}

Вывод:

http://dl.dropbox.com/u/2809/lscolor.png

5
задан esac 10 November 2010 в 04:46
поделиться