PowerShell数组索引调用失效,循环创建文件夹出错求助
解决PowerShell数组索引在字符串中解析异常的问题
问题原因
在双引号包裹的字符串中,$Thickness[$Counter]未被正确解析为数组元素。PowerShell会将$Thickness解析为整个数组,再把[$Counter]作为普通字符串拼接,导致生成错误的路径格式(所有文件夹名拼接[数字]后再加上\Previous Years)。
修复方案1:修正变量解析逻辑
在双引号字符串中,用子表达式$()包裹数组索引表达式,让PowerShell先计算表达式结果再插入字符串:
$Thickness = Get-ChildItem $PSScriptRoot | Where-Object {$_.PSIsContainer} | ForEach-Object {$_.Name} for($Counter=0;$Counter -lt $Thickness.Count;$Counter++){ $targetPath = "$PSScriptRoot\$($Thickness[$Counter])\Previous Years" if(!(Test-Path -Path $targetPath)){ New-Item -Path $targetPath -ItemType Directory } }
修复方案2:更简洁的PowerShell风格写法
直接遍历文件夹对象(而非仅存储名称数组),避免数组索引的麻烦,代码更直观且不易出错:
Get-ChildItem $PSScriptRoot -Directory | ForEach-Object { $targetPath = Join-Path -Path $_.FullName -ChildPath "Previous Years" if (-not (Test-Path -Path $targetPath)) { New-Item -Path $targetPath -ItemType Directory } }
说明:
-Directory参数直接筛选子文件夹,替代Where-Object {$_.PSIsContainer}写法更简洁。Join-Path是PowerShell标准路径拼接方法,避免手动拼接字符串时的路径分隔符问题。- 直接遍历文件夹对象,无需单独存储数组,代码逻辑更紧凑。
内容的提问来源于stack exchange,提问作者FrancoisB
相关产品推荐
相关产品推荐

