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

如何在PowerShell中通过for循环输出编号变量的内容?

解决PowerShell循环中动态引用编号变量的问题

你遇到的问题是因为PowerShell解析$mPS0$i时,会把它拆成$mPS0(未定义则为空)和$i的值拼接,而不是识别为“变量名是mPS0加i的值”的动态变量。下面是几种可行的解决方法:

方法1:使用Get-Variable(推荐,安全可靠)

通过Get-Variable命令根据动态生成的变量名获取对应值,加上-ValueOnly参数直接返回变量内容:

for($i = 1; $i -lt 6; $i++) {
    $mPSValue = Get-Variable -Name "mPS0$i" -ValueOnly
    $sNameValue = Get-Variable -Name "sName_0$i" -ValueOnly
    Write-Host "mPS0$i":  $mPSValue / $sNameValue
}

方法2:使用Invoke-Expression(不推荐,存在注入风险)

如果能确保循环变量$i是可信输入,可以用Invoke-Expression解析动态生成的命令字符串,注意要转义变量前的$:

for($i = 1; $i -lt 6; $i++) {
    Invoke-Expression "Write-Host 'mPS0$i':  `$mPS0$i / `$sName_0$i"
}

注意:如果$i包含不可信内容,这种方法可能会执行恶意代码,因此不建议在处理外部输入时使用。

方法3:提前用哈希表管理变量(更规范,易维护)

把分散的编号变量整理到哈希表中,后续循环直接遍历哈希表,代码可读性和可维护性更好:

# 将变量存入哈希表
$variableMap = @{
    1 = @{ mPS = $mPS01; sName = $sName_01 }
    2 = @{ mPS = $mPS02; sName = $sName_02 }
    3 = @{ mPS = $mPS03; sName = $sName_03 }
    4 = @{ mPS = $mPS04; sName = $sName_04 }
    5 = @{ mPS = $mPS05; sName = $sName_05 }
}

# 遍历哈希表输出内容
foreach($num in $variableMap.Keys | Sort-Object) {
    Write-Host "mPS0$num":  $variableMap[$num].mPS / $variableMap[$num].sName
}

内容的提问来源于stack exchange,提问作者snahl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:27:49