2017-11-08 11 views
2

私はPowerShellで作業しています。私のPSVersionは3.0です。私はそれにいくつかのCSVファイルを持つフォルダがあります。各ファイルは複数の列を持つことができ、1行目に列見出しが含まれます。列の順序は常に同じではありません。私は各ファイルから特定の列だけを取り出す必要があります。フェッチする必要のある列はすべてのファイルで同じで、すべてのファイルには少なくともフェッチする必要がある(一般的にはそれ以上の)列があります。フェッチされたら、各ファイルのフェッチされた列を、対応するCSV、別のフォルダにエクスポートする必要があります。フォルダ内のすべてのファイルを読み込み、変換して出力する方法は?

file1.csv

 
Col1 Col2 Col3 Col4 
a  1  z  0.0 

file2.csv:私は列のみCol1、各ファイルからCol4を取得する必要が

 
Col4 Col1 Col3 Col2 
1.0  b  x  2 

例えば、私は私の入力フォルダに以下の2つのファイルを持っています。だから、私は、次のファイルを出力することを期待:

file1.csv

 
Col1 Col4 
a  0.0 

file2.csv

以下
 
Col1 Col4 
b  1.0 

私のスクリプトです:

$inputDirectory = 'C:\some_path\input\'; 
$outputDirectory = 'C:\another_path\output\'; 

$inputFiles = Get-ChildItem -Path $inputDirectory -Recurse -Include *.csv; 

ForEach-Object { 
    Import-Csv $inputFiles | 
     Select-Object -Property Col1, Col4 | 
     Export-Csv $outputDirectory + $inputFiles.Name -NoTypeInformation 
    } 

私はとのトラブルを抱えていますExport-Csvコマンド。 Select-Objectの中に私の配管についての何かが間違っている、だから、

A positional parameter cannot be found that accepts argument 'System.Object{}'

:私は次のエラーを取得しておきます。このエラーを解決して目標を達成するにはどうすればよいですか?

答えて

2

ロジックは健全ですが、構文は意味をなさないものです。

$Path = 'C:\Temp\Input' 
$Output = 'C:\Temp\Output' 

$Files = Get-ChildItem -Path $Path -Recurse -Include '*.csv' 

ForEach ($File in $Files) 
{ 
    Import-Csv -Path $File.FullName | Select-Object -Property @('Col1','Col4') | 
     Export-Csv -Path (Join-Path $Output $File.Name) -NoTypeInformation -Append 
} 
+0

トンインクルードファイルをサブフォルダに入れたくない場合は、-Recurseは必要ですか? – user3100444

+0

'-Recurse'スイッチを指定しないと、指定したディレクトリのファイル/フォルダのみがキャプチャされます@ user3100444 – TheIncorrigible1

関連する問題