【问题标题】:How to read, transform, and output all files in a folder?如何读取、转换和输出文件夹中的所有文件?
【发布时间】:2017-11-09 09:16:23
【问题描述】:

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

file1.csv:

Col1 Col2 Col3 Col4 1z 0.0

file2.csv:

Col4 Col1 Col3 Col2 1.0 b x 2

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

file1.csv:

Col1 Col4 一个 0.0

file2.csv:

Col1 Col4 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 的管道有些问题是错误的。如何解决此错误并实现我的目标?

【问题讨论】:

    标签: powershell


    【解决方案1】:

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

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

    【讨论】:

    • 如果我不想在子文件夹中包含文件,是否需要 -Recurse?
    • 没有-Recurse开关,你只捕获指定目录@user3100444中的文件/文件夹
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2010-12-23
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多