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
相关产品推荐
相关产品推荐

