PowerShell中对象转字符串及JSON配置文件路径拼接问题求助
解决PowerShell中JSON路径与文件名拼接的问题
我来帮你搞定这个路径拼接的需求!你的核心目标是把JSON里配置的根路径和各个子项里的文件名拼接成完整的文件路径字符串对吧?咱们先梳理下当前的问题,再给出调整后的代码。
问题分析
你现在的JSON配置里,Test1、Test2这些是对象类型(不是数组),每个对象下的Schema_File和Proc_File是单个文件名;而你的代码里尝试用数组索引[$ReportCount]去访问,这是导致问题的原因之一。另外手动拼接路径容易出现反斜杠缺失/重复的问题,推荐用PowerShell自带的Join-Path命令来处理路径拼接,更可靠。
调整后的完整代码
针对你提供的JSON结构,我修改了代码,能正确遍历每个文件夹节点和对应的文件名,生成完整路径:
cls $ReportConfiguration = Get-Content -path "C:\Users\asingh\Documents\PowerShell Scripts\JSON\stackOverflow.json" | ConvertFrom-Json # 获取配置里的根路径 $rootPath = $ReportConfiguration.ReportScripts.ReportFiles.Location # 遍历ReportScripts下的所有子节点(跳过存储路径的ReportFiles) foreach ($folder in $ReportConfiguration.ReportScripts.PSObject.Properties) { if ($folder.Name -eq "ReportFiles") { continue } Write-Host "当前文件夹: $($folder.Name)" -ForegroundColor Green # 遍历当前文件夹下的所有文件名属性 foreach ($fileProp in $folder.Value.PSObject.Properties) { $fileName = $fileProp.Value # 用Join-Path自动处理路径分隔符,拼接根路径+文件夹名+文件名 $fullPath = Join-Path -Path $rootPath -ChildPath "$($folder.Name)\$fileName" # 输出完整路径 Write-Host $fullPath } Write-Host "`n" }
代码说明
- 遍历JSON对象属性:用
PSObject.Properties来遍历JSON对象的子属性,比Get-Member更简洁直接,能直接拿到每个文件夹节点(Test1、Test2)的名称和值。 - 跳过非文件夹节点:判断并跳过
ReportFiles,因为它是用来存储根路径的,不是我们要处理的文件夹。 - 安全拼接路径:
Join-Path会自动处理路径分隔符的问题——不管根路径末尾有没有反斜杠,它都会生成正确的路径格式,避免手动拼接的错误。 - 遍历文件名:每个文件夹节点下的
Schema_File、Proc_File都是文件名,遍历这些属性的值,再和路径拼接。
如果你的文件名是数组形式
如果后续你的JSON结构调整为文件夹对应文件名数组(比如Test1: ["S1.sql", "P1.sql"]),只需要修改遍历文件名的部分即可:
# 替换原来的文件名遍历代码 foreach ($fileName in $folder.Value) { $fullPath = Join-Path -Path $rootPath -ChildPath "$($folder.Name)\$fileName" Write-Host $fullPath }
这样就能正确遍历数组里的每个文件名,生成完整路径啦。
内容的提问来源于stack exchange,提问作者Abhimanyu
相关产品推荐
相关产品推荐

