2012-11-13 35 views
2

如何輸入列表並使內容以多列顯示,例如在三個項目之後;例如:將輸入列表分解成若干列

$carlist = "c:\temp\list-of-cars.txt"    # listing 10 cars    
$num-cols = 4 

內容將是:

Car1   
Car2 
..  
Car9  
Car10 

$c = $carlist.count/$num-cols      # some number of columns 
write-host $carlist (something) 

輸出將(基於列的數目:

Car1   Car4   Car7   Car10            
Car2   Car5   Car8       
Car3   Car6   Car9 

回答

1
$cars = get-content "list-of-cars.txt" 
$cars | Format-Wide {$_} -Column 4 -Force 

或者,如果你喜歡一個班輪:

Get-Content .\list-of-cars.txt | Format-Wide {$_} -Column 4 -Force 
+0

所有的好迴應......我應該包括,我有「ForEach」聲明,每個「汽車」,結果是,我試圖格式化成列。 –

+0

@ user1821848如果你可以在你的問題中提供更多的細節,幷包含你的代碼,那麼我可以更新我的解決方案,使其更符合你的想法。 – David

+0

#創建輸入窗口...輸入窗口 # #代碼,與上市一切...... # $卡洛斯= 「列表中,cars.txt」 $數numCols = 4 的ForEach($車在GC $卡洛斯){ 創建按鈕標記$車 \t button.click \t代碼窗口打開 \t一些其他的東西...... \t} #代碼利用汽車的名單, #每個$汽車創建按鈕, #並創建$ numcols列以顯示inp ut窗口。 –

0

這是一種方式:

Function SplitTo-Column($colnum, [object[]]$list) 
{ 
    for($i=1; $i -le $list.Length; $i++) 
    {  
    if (($i % $colnum) -eq 0) 
    { 
     [Console]::WriteLine($list[$i-1]) #or write-host "$($list[$i-1])" is more posh  
    } 
    elseif ($i -eq $list.count) 
    { 
     [Console]::WriteLine($list[$i-1]) #or write-host "$($list[$i-1])" 
    } 
    else 
    { 
     [Console]::Write($list[$i-1] + "`t") #or write-host "$($list[$i-1])`t" -NoNewline 
    } 
    } 
} 

使用:

$carlist = gc c:\temp\list-of-cars.txt    # listing 10 cars    
$numcols = 4 

SplitTo-Column -colnum $numcols -list $carlist 
+0

這一個沒有工作對我來說...唯一的輸出是$ carlist的價值。 –

+0

@ user1821848我想你的意思是沒有工作!我在'$ carlist'值分配中忘記了一個'get-content' ... –

+0

基督徒,我正在測試你的回答,而我的問題更詳細:另一個例子,如果我要說ping一個列表服務器,我怎麼能顯示所有服務器的輸出不在列表中,但顯示4列?謝謝! –

2

嘗試Format-Wide的cmdlet:

Get-Content cars.txt | Select-Object @{n='name';e={$_}} | Format-Wide -Column 4 
+0

這一班輪班也工作過,非常適合上市的成績。我的目標是做一些事情,並在列中獲得結果。 –