powershell - 如何读取、转换、输出文件夹中的所有文件?

标签 powershell

我正在 PowerShell 中工作。我的PS版本是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

I need to fetch only columns Col1 and Col4 from each file. So, I expect to output the following files:

file1.csv:

Col1   Col4
a      0.0

file2.csv:

Col1   Col4
b      1.0

Below is my script:

$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 命令时遇到问题。我不断收到以下错误:

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

所以,我的 Select-Object 管道传输是错误的。我怎样才能解决这个错误并实现我的目标?

最佳答案

你的逻辑是合理的,但你的语法没有意义。

$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
}

关于powershell - 如何读取、转换、输出文件夹中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47189498/

相关文章:

powershell - Invoke-Command:找不到可以接受参数的位置参数

regex - 正则表达式从域中提取用户名

parsing - 用于从 [string] 解析输入参数-值对的 native 机制

powershell - 数组错误引发问题

powershell - 如何修改发送到 powershell v2 中内置命令的参数?

powershell - 获取外部对象的属性

powershell - 在PowerShell中将变量传递到语句 block 括号中

.net - PowerShell .NET 模仿 Windows 树节点的默认复选框行为

powershell - 使PowerShell认为对象不可枚举

PowerShell重定向并非始终有效