2017-03-03 56 views
1

我想製作一個ps1文件夾中的所有.csv文件,將所有值拖出2列(標頭標識),然後吐出新的.csv僅包含這兩列的每個文件。從CSV導入指定的列,按標題名稱導出到新文件

我可以在下面的單個文件上工作,但是當我添加通配符時,它表示函數不能在多個文件上工作。我嘗試了其他方法,但我沒有正式的CS背景(所以我下面的「腳本」可能看起來很簡單);我靠近,但目前爲止沒有任何工作。

$inputpath = 'C:/Users/AAA/AAA/AAA/AAA/' 
$inputfile = 'BBB.csv' 
$outputpath = $inputpath 
$outputfile = $inputfile.basename + 'edited' + '.csv' 

Import-Csv $inputpath$inputfile | 
    select COLUMNtitle1, COLUMNtitle2 | 
    Export-Csv -Path $outputpath$outputfile -NoTypeInformation 

echo 
+0

你期待看到什麼,你在看什麼? –

回答

2

既然你不使用Get-ChildItem$inputfile那麼就沒有一個basename屬性。當加入路徑時使用Join-Path更安全,並且更好地避免+連接字符串。

$inputfolder = 'C:\Users\AAA\AAA\AAA\AAA\' 
Get-ChildItem $inputfolder -include *.csv | % { 
    $outputpath = Join-Path $inputfolder "$($_.basename)edited.csv" 
    Import-Csv $_.fullname | select COLUMNtitle1,COLUMNtitle2 | Export-Csv -Path $outputpath -NoTypeInformation 
} 
+0

謝謝BenH。這有很大幫助。 兩個問題: 1:我必須更改 $ inputobject = Get-ChildItem $ inputfolder 然後它一次運行所有.csv。這將所有結果放到一個.csv輸出中,這很好,但是j/w如何編寫它以創建對應於每個輸入的單獨.csv? 2.此外,輸出.csv文件僅命名爲「edited.csv」。 $($ inputobject.basename),我假設因爲有多個輸入文件? – physlexic

+0

@physlexic答案編輯處理文件夾中的所有文件。 – BenH