【发布时间】:2022-01-13 20:36:23
【问题描述】:
我正在尝试编写我的第一个 PowerShell 脚本,但我正在努力理解面向对象和管道的方法。所以我有一个这样的目录结构(Google Takeout Nest 目录):
Path\DeviceID-A\
- Year\
- Month\
- year-month-sensors-a.csv
Path\DeviceID-B\
- Year\
- Month\
- year-month-sensors-b.csv
...
我想将所有 CSV 聚合在一起,我编写了一个简单的脚本来执行此操作:
Get-ChildItem -Recurse -Filter *.csv | Select-Object -ExpandProperty FullName | Import-Csv | Export-Csv merged.csv -NoTypeInformation -Append
但是,当所有内容聚合在一起时,我会丢失 DeviceID 的上下文。所以我想添加一个包含这些初始根目录的附加列,类似于:
Import-Csv merged.csv | Select-Object *,@{Name='nest_id';Expression={$nestDeviceID}} | Export-Csv merged-v2.csv -NoTypeInformation
因此,year-month-sensors-a.csv 中的每一行都会有一个名为 nest_id 的附加列,对于该根目录下的任何 CSV,其值为 DeviceID-A。
...但是我不能完全协调这两个脚本如何以编程方式迭代它们,无论我需要使用ForEach-Object 还是管道。
任何建议将不胜感激!
【问题讨论】:
-
结果将是 1 个合并的 CSV 与一个具有其父目录的新列,您非常接近,但是,我们可以假设所有 CSV 具有相同的标题吗?否则会导致错误。
-
是的——抱歉,我应该说清楚的。幸好所有 CSV 格式完全相同。
标签: powershell csv get-childitem import-csv foreach-object