【问题标题】:Use Import-Csv cmdlet with all files in directory对目录中的所有文件使用 Import-Csv cmdlet
【发布时间】:2018-03-21 19:25:47
【问题描述】:

使用 PowerShell,我创建了一个脚本,该脚本将标题添加到 CSV,选择指定列中的唯一值,并将其导出为新的 CSV。

那个脚本是:

import-csv -Header (1..39) -Path 'J:\consult evv\splitfile_385.csv' | select '30', '31', '39' -Unique | Export-Csv -Path "C:\Users\CFOSTER\Desktop\stuff\modsplitfile_385.csv" -NoTypeInformation

此脚本仅适用于一项:splitfile_385.csv。我想将它用于目录中的所有文件。 我可以遍历指定路径中的项目,但无法将循环与上面的脚本结合起来。

目前,我有:

$files = Get-ChildItem "J:\consult evv"
for ($i=0; $i -lt $files.Count; $i++) {

    $outfile = "C:\Users\CFOSTER\Desktop\Stuff\new" + $files[$i]
    Get-Content $files[$i].FullName | Where-Object { !($_ -match 'step4' -or $_ -match 'step9') } | import-csv -Header (1..39) -Path $files[$i].FullName | select '30', '31', '39' -Unique | Set-Content $outfile
}

使用它会给我错误:import-csv : You must specify either the -Path or -LiteralPath parameters, but not both

如何将我的脚本与目录中所有文件的循环结合起来?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用ForEach-Object,一次导入一个。

    Get-ChildItem "C:\CSV Files\*.csv" | ForEach-Object {
      Import-Csv $_ | Where-Object { ... }
    }
    

    如果要输出到新的 CSV 文件,请确保输出文件名与 Get-ChildItem 使用的模式不匹配,否则会遇到麻烦。

    【讨论】:

      【解决方案2】:

      试试这样的:

      Get-ChildItem "J:\consult evv" -file -Filter "*.csv" | %{
      
          $outfile = "C:\Users\CFOSTER\Desktop\Stuff\new" + $_.Name
      
          Get-Content $_.FullName | select -skip 1 |  Where { !($_ -match 'step4' -or $_ -match 'step9') } | 
              ConvertFrom-Csv -Header (1..39) | select '30', '31', '39' -Unique | Out-File $outfile -Append 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        相关资源
        最近更新 更多