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

PowerShell中不想用数组,能否在Remove-Item中使用folder$i动态变量名?

动态变量名在Remove-Item中的使用方法

当然可以用folder$i这类动态变量名来实现你的需求,但你当前的代码写法有问题——PowerShell没办法直接识别$(folder$i)这种格式来引用动态命名的变量。下面给你两种可行的修正方案:

方案1:使用Get-Variable获取变量值

通过Get-Variable命令指定动态生成的变量名,再用-ValueOnly参数直接提取变量的值,这样就能拿到对应的路径传递给Remove-Item了:

Set-Variable -Name "folder1" -Value "c:\windows\temp\1\*"
Set-Variable -Name "folder2" -Value "c:\windows\temp\2\*"
Set-Variable -Name "folder3" -Value "c:\windows\temp\3\*"
for ($i=1; $i -le 3; $i++) {
    # 获取动态变量的值
    $targetPath = Get-Variable -Name "folder$i" -ValueOnly
    Write-Host "folder to delete : Remove-Item -path $targetPath -recurse"
    Write-Host $targetPath
    # 建议先加-WhatIf参数测试执行逻辑,确认无误后再移除
    Remove-Item -path $targetPath -Recurse -WhatIf
}

方案2:使用大括号明确变量名范围

PowerShell支持用${变量名}的语法来明确变量名的边界,这样就能直接解析带动态部分的变量名:

Set-Variable -Name "folder1" -Value "c:\windows\temp\1\*"
Set-Variable -Name "folder2" -Value "c:\windows\temp\2\*"
Set-Variable -Name "folder3" -Value "c:\windows\temp\3\*"
for ($i=1; $i -le 3; $i++) {
    # 用大括号包裹动态变量名,确保PowerShell正确解析
    $targetPath = ${folder$i}
    Write-Host "folder to delete : Remove-Item -path $targetPath -recurse"
    Write-Host $targetPath
    Remove-Item -path $targetPath -Recurse -WhatIf
}

重要细节提醒

  • 注意把代码里的中文破折号–换成英文减号-,否则PowerShell会识别为无效参数。
  • 强烈建议先添加-WhatIf参数测试删除逻辑,避免误删重要文件,确认输出的路径正确后再移除该参数。

另外补充一句:虽然你有不用数组的理由,但其实用数组来管理这些路径会更简洁易维护(比如添加新路径只需在数组里追加),这里也给你贴个示例供参考:

$folders = @(
    "c:\windows\temp\1\*",
    "c:\windows\temp\2\*",
    "c:\windows\temp\3\*"
)
foreach ($folder in $folders) {
    Write-Host "folder to delete : Remove-Item -path $folder -recurse"
    Write-Host $folder
    Remove-Item -path $folder -Recurse -WhatIf
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:05:15