You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理-PowerShell混合脚本中变量值拼接失败求助

解决PowerShell嵌套字典值拼接时输出类型名的问题

我一眼就看出问题所在了——你在PowerShell里拼接字符串时,没有正确求值嵌套字典的索引值,导致PowerShell把字典对象的类型名输出了,而不是实际的版本号。

问题根源

当你写$package@$obj[$key][$package]时,PowerShell会把$obj[$key][$package]当成一个未被完整求值的表达式,在字符串上下文里,它无法直接解析为字符串,所以就输出了这个字典对象的类型全称System.Collections.Generic.Dictionary2[System.String,System.Object][dependencies][@types/react]`。

修复方案

你需要用$()将嵌套的索引表达式包裹起来,强制PowerShell先计算出实际的版本值,再进行字符串拼接。修改PowerShell部分的循环代码即可:

foreach ($key in $obj.keys) {
    foreach($package in $obj[$key].keys){
        # 用$()包裹索引表达式,确保先求值再拼接
        echo "$package@$($obj[$key][$package])" >> packages.txt
    }
}

或者你也可以先把版本号存入一个变量,再拼接,这样更清晰:

foreach ($key in $obj.keys) {
    foreach($package in $obj[$key].keys){
        $version = $obj[$key][$package]
        echo "$package@$version" >> packages.txt
    }
}

验证效果

修改后运行脚本,packages.txt里就会得到你预期的输出:

@types/react@16.3.10
react@16.3.2
react-dom@16.3.2
react-scripts@1.1.4

内容的提问来源于stack exchange,提问作者Sujit.Warrier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:22:03