【发布时间】:2021-08-26 00:09:59
【问题描述】:
我有一个包含几十个 json 文件的文件夹,我通过 powershell 输出到 csv。所有 json 文件具有相同的格式。我当前的 powershell 脚本是通过文件名一个一个地定义每个文件,选择各种值并将其输出到同一个 csv。
如何修改 powershell 脚本,以便它简单地遍历文件夹中的每个文件,而不必通过文件名专门定义每个文件?
每个json的内容是这样的:
{
"ItemName": "A",
"ItemID": "I001",
"ItemDate": "2021-03-01",
"ItemValue": "1000",
"ItemTags": [
{
"Name": "Tag 1",
"Value": "medium"
},
{
"Name": "Tag 2",
"Value": "red"
},
{
"Name": "Tag 3",
"Value": null
},
{
"Name": "Tag 4",
"Value": "Yes"
}
]
},
{
"ItemName": "B",
"ItemID": "I002",
"ItemDate": "2021-02-01",
"ItemValue": "3000",
"ItemTags": [
{
"Name": "Tag 1",
"Value": "best"
},
{
"Name": "Tag 2",
"Value": "green"
},
{
"Name": "Tag 3",
"Value": null
},
{
"Name": "Tag 4",
"Value": "No"
}
]
这是一个 powershell 示例。如何修改它,以便通过 C:\temp 文件夹并对每个文件执行相同的输出,而无需使用文件名指定 -Path 部分?
$obj1 = Get-Content -Path "C:\Temp\sample1.json" | ConvertFrom-Json
$obj1 | select ItemName, ItemID, ItemDate, ItemValue, @{Name = 'Tag 4'; Expression ={($_.itemtags | where-object Name -eq "Tag 4").Value}} | Export-CSV "C:\Temp\items.csv" -NoTypeInformation -Append
$obj2 = Get-Content -Path "C:\Temp\sample2.json" | ConvertFrom-Json
$obj2 | select ItemName, ItemID, ItemDate, ItemValue, @{Name = 'Tag 4'; Expression ={($_.itemtags | where-object Name -eq "Tag 4").Value}} | Export-CSV "C:\Temp\items.csv" -NoTypeInformation -Append
$obj3 = Get-Content -Path "C:\Temp\sample3.json" | ConvertFrom-Json
$obj3 | select ItemName, ItemID, ItemDate, ItemValue, @{Name = 'Tag 4'; Expression ={($_.itemtags | where-object Name -eq "Tag 4").Value}} | Export-CSV "C:\Temp\items.csv" -NoTypeInformation -Append
【问题讨论】:
标签: json powershell csv