使用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
。
如何将脚本与目录中所有文件的循环组合?
答案 0 :(得分:1)
您可以使用ForEach-Object
并一次导入一个。
Get-ChildItem "C:\CSV Files\*.csv" | ForEach-Object {
Import-Csv $_ | Where-Object { ... }
}
如果要输出到新的CSV文件,请确保输出文件名与Get-ChildItem
使用的模式不匹配,否则您将遇到麻烦。
答案 1 :(得分:0)
尝试这样的事情:
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
}