首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对目录中的所有文件使用Import-Csv cmdlet

对目录中的所有文件使用Import-Csv cmdlet
EN

Stack Overflow用户
提问于 2018-03-22 03:25:47
回答 2查看 541关注 0票数 0

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

该脚本为:

代码语言:javascript
复制
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。我想对一个目录中的所有文件使用它。我可以遍历指定路径中的项,但在将循环与上面的脚本结合起来时遇到了问题。

目前,我有:

代码语言:javascript
复制
$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

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

EN

回答 2

Stack Overflow用户

发布于 2018-03-22 03:35:23

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

代码语言:javascript
复制
Get-ChildItem "C:\CSV Files\*.csv" | ForEach-Object {
  Import-Csv $_ | Where-Object { ... }
}

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

票数 1
EN

Stack Overflow用户

发布于 2018-03-22 14:52:54

试试这样的东西:

代码语言:javascript
复制
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 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49415009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档