2013-07-11 44 views
0

我有一個腳本下面,我想執行一個目錄中的所有.csv文件。我知道我可以使用Get-ChildItems,但是如何僅在。\中對.csv文件進行過濾並執行我的腳本?如何針對目錄中的所有CSV文件執行PowerShell腳本?

import-csv .\chapters.csv | 
    ConvertTo-Json -Compress | 
    ForEach-Object {$_ -creplace '""NULL""','null'} | 
    Out-File .\chapters.json 

回答

2

如果我理解你的要求,只使用一個文件名匹配和管道的結果進口CSV **。使用一個Foreach-Object循環來捕獲每個CSV文件的基名,以用於命名輸出文件。

Get-ChildItem .\*.csv | Foreach-Object { 
    $basename = $_.BaseName 
    import-csv $_ | ConvertTo-Json -Compress | Foreach {$_ -creplace '""NULL""','null'} | Out-File ".\$basename.json" 
} 

順便說一句,有沒有 「S」 在末獲取-ChildItem

+0

抱歉,並不意味着將它們放在一個文件中,但如何爲每個文件執行腳本?因此,將爲每個(chapters.csv,authors.csv,books.csv等將生成chapters.json,authors.json,books.json)生成一個json文件。 – TruMan1

+0

「glob」並不意味着要將數據收集到單個文件中。這是一個標準的計算術語,意思是使用通配符匹配名稱(特別是文件名):http://en.wikipedia.org/wiki/Glob_%28programming%29。 'Get-ChildItem。* * .csv'將選擇所有具有** .csv **擴展名的文件,並將它們一個接一個地輸入到管道中,通過** Import-Csv **轉換爲對象。你甚至嘗試過嗎? –

+1

其實,我只是注意到一個問題,那就是輸出文件總是** chapters.json **,並且每次都會被覆蓋,所以你只能得到最後一個CSV文件的結果。我將修改答案,以便**。json **文件與** .csv **文件具有相同的基本名稱。 –

相關問題