2013-06-03 69 views
1

我一整天都在苦苦掙扎...我試圖導入csv,過濾掉某些商店,將所有商店的id填充爲5位,然後用不同的分隔符重新導出csv並刪除引號。我已經得到了所有的工作,除了零填充(input3不工作)。import csv,zeropad列,然後在powershell中導出csv

#Sleep -seconds 20 #wait for RW report generation 
$input = Import-Csv E:\RWS\SysFiles\reports\CAST\ClientExport.csv -Header 'store','desc','status','ip','tcpip','timezone','drive','path','col9','col10' 
$input2 = $input | where-object { $_.store -match "[0-9]" -and -not $_.store.StartsWith("99") } 
#$input3 = $input2 | ForEach-Object { $_.store = $_.store.PadLeft(5,'0') } 
$input3 | ConvertTo-Csv -NoTypeInformation -Delimiter ';' | % {$_ -replace '"', ""} | out-file E:\RWS\SysFiles\reports\CAST\CleanClientExport.csv -force 

例如輸入:

32013, 「SHREVEPORT,LA」,ENABLED,10.4.43.11,(TCP/IP), - 6,C:\程序 文件\遠程\, , 7045,ELIZABETHTOWN-KY,已啓用10.82.240.11,(TCP/IP), - 5,C:\程序 文件\遠程\ ,,

例子了:

32013; SHREVEPORT,LA; ENABLED; 10.4.43.11;(TCP/IP); - 6; C:; \ Program Files \ Remote \ ;;; ; ELIZABETHTOWN-KY; ENABLED; 10.82.240.11;(TCP/IP); - 5; C:; \ Program Files \ Remote \ ;;;

我只是得到一個空白的csv ...我努力在PS控制檯中查看$輸入,無法弄清楚如何顯示我在主機屏幕上輸入的內容!

+0

這個「例子」是如何讓它看起來的?或者它看起來像什麼? –

回答

0

像這樣的東西應該工作:

$infile = "E:\RWS\SysFiles\reports\CAST\ClientExport.csv" 
$outfile = "E:\RWS\SysFiles\reports\CAST\CleanClientExport.csv" 

Import-Csv $infile -Header 'store','desc','status','ip','tcpip','timezone','drive','path','col9','col10' ` 
    | ? { $_.store -notmatch '^99' } ` 
    | % { $_.store = "{0:D5}" -f [int]$_.store; $_ } ` 
    | ConvertTo-Csv -NoTypeInformation -Delimiter ';' ` 
    | % { $_ -replace '"', '' } ` 
    | Out-File $outfile -Force 

如果導入CSV到一個變量,可以顯示導入的數據通過輸入線cotaining只是變量:

PS C:\> $csv = Import-Csv $infile -Header 'store','desc','status','ip',... 
PS C:\> $csv 


store : 32013 
desc  : SHREVEPORT, LA 
status : ENABLED 
ip  : 10.4.43.11 
tcpip : (TCP/IP) 
timezone : -6 
drive : C: 
path  : \Program Files\Remote\ 
col9  : 
col10 : 

store : 07045 
desc  : ELIZABETHTOWN-KY 
status : ENABLED 
ip  : 10.82.240.11 
tcpip : (TCP/IP) 
timezone : -5 
drive : C: 
path  : \Program Files\Remote\ 
col9  : 
col10 :
+0

關於我遇到的第二個問題...我知道我應該在上面顯示的時候看到這個控制檯輸出,但是我什麼都沒有。希望我可以附加截圖...我在同一行輸入$ csv = Import-Csv filepath -header等等,然後$ csv並且什麼也沒得到,只是在控制檯上有一個新行。我不明白。當我鍵入$ csv.gettype()時,它返回arraylistemuneratorsimple,所以有東西在那裏....我試過了所有我能想到的變化來顯示它,寫主機「$ csv」等等。我所能做的就是再次以csv格式導出它,以便在文件中查看它... –

+0

這工作,btw,thx。我在第一個foreach中錯過了額外的$ _。 –

1
Import-Csv E:\RWS\SysFiles\reports\CAST\ClientExport.csv -Header ... | 
Where-Object { $_.store -match "[0-9]" -and -not $_.store.StartsWith("99") } | 
Foreach-Object {$_.store = $_.store.PadLeft(5,'0'); $_} | 
ConvertTo-Csv -NoTypeInformation -Delimiter ';' | 
Foreach-Object {$_ -replace '"'} | 
Out-File E:\RWS\SysFiles\reports\CAST\CleanClientExport.csv -Force 
+0

這工作,thx。我在第一個foreach中錯過了額外的$ _。 –