2017-01-25 12 views
1

この作業をコマンドラインで開始した後、私はPowershellを使用してダウンして汚れている必要があることに気付きました。私は約100のフォルダがあり、各フォルダには数千のCSVファイルがあり、各フォルダ内で一緒にマージしたいと思っています。理想的には、各フォルダのマージされたCSVファイルは、親フォルダ名を使用します。例えば、ここでは100のフォルダ親フォルダ名を使用したPowerShellのCSVファイルの一括マージ

Eをconatining最上位フォルダである:\ CSVFolders

はサブフォルダは、このような半ランダムに名前が付けられます。

E:\ CSVFolders \ Folder1に
E:\ CSVFolders \ Folder18

これまでのところ、私はこの時点で午前:

# Merge csv files and use the parent folder name 
Import-Csv (Get-ChildItem File*.csv) | 
    Export-Csv $folderName.csv -NoTypeInformation -Encoding UTF8 

私は苦労していますスクリプトがサブフォルダを列挙して、マージされたCSVファイルのベースとしてその名前を使用するようにしてください。だから誰でもこの上で光を当てることができたら、私はそれを感謝します!

答えて

1

を使用して、2つのループ:

あなたはこのようなディレクトリによりグループ化することができ
Get-ChildItem 'E:\CSVFolders' | Where-Object { 
    $_.PSIsContainer 
} | ForEach-Object { 
    $csv = Join-Path $_.FullName ($_.Name + '.csv') 
    Get-ChildItem $_.FullName -Filter File*.csv | ForEach-Object { 
     Import-Csv $_.FullName 
    } | Export-Csv $csv -NoType -Encoding UTF8 
} 
+0

おかげで、あなたの入力のためのアンスガー - そのスクリプトは、最上位レベルの空のCSFファイル(フォルダ名を含む)をダンプします。 – GDUBS

+0

更新された回答を参照してください。 –

0

:(なし純粋主義者のための)

Get-ChildItem "c:\temp" -file -Filter "*.csv" -Recurse | 
    group DirectoryName | 
     %{$dir=$_.Name; $_.Group.FullName | %{import-csv -path $_} | export-csv "$dir\global.csv" -NoTypeInformation} 

ショートバージョン:

gci "c:\temp" -file -Filter "*.csv" -Rec | 
    group DirectoryName | 
     %{$dir=$_.Name; $_.Group.FullName | %{ipcsv -path $_} | epcsv "$dir\global.csv" -NoType} 
関連する問題