如何读取,转换和输出文件夹中的所有文件?

时间:2017-11-08 20:53:40

标签: powershell

我在PowerShell工作。我的PSVersion是3.0。我有一个包含多个CSV文件的文件夹。每个文件中可以包含多个列,并在第一行包含列标题。列的顺序并不总是相同。我需要从每个文件中仅获取某些列。我需要获取的列在所有文件中都是相同的,并且所有文件至少包含我需要获取的列(通常更多)。获取后,我需要将为每个文件提取的列导出到不同文件夹中的相应CSV。例如,我的输入文件夹中有以下2个文件:

file1.csv

Col1   Col2   Col3   Col4
a      1      z      0.0

file2.csv

Col4   Col1   Col3   Col2
1.0      b      x      2

我需要从每个文件中仅提取列Col1Col4。所以,我希望输出以下文件:

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命令的问题。我一直收到以下错误:

  

找不到接受参数'System.Object {}'

的位置参数

所以,关于Select-Object的管道问题是错误的。如何解决此错误并实现目标?

1 个答案:

答案 0 :(得分: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
}