我正在尝试获取变量,将其拆分然后重建它,以便我可以迭代地使用Test-Path
。我不确定是否有可能。到目前为止我的基本形式的代码看起来像这样,我遇到的麻烦是重建注册表路径。
$Key = "HKCU:\SOFTWARE\MyKey\Test"
$SplitKey = $Key -split "\\"
#Write-Host $SplitKey.Length
$i = 0
do {
if ($i -gt 0) {
$x = $i - 1
$sk = $SplitKey[$x] + "\" + $SplitKey[$i] + "\"
Write-Host $sk
} else {
$sk = $SplitKey[$i] + "\"
Write-Host $sk
}
$i++
} until ($i -ge $SplitKey.Length)
密钥的第一部分正是按照我想要的方式重建。我的计划是将Test-Path
合并到循环中,如果New-Item
失败,则需要Test-Path
。
任何人都可以帮助循环并逐步重建$SplitKey
数组吗?
答案 0 :(得分:1)
这就是导致问题的原因:
$x = $i - 1
$sk = $SplitKey[$x] + "\" + $SplitKey[$i] + "\"
您只需从上一个数组元素和当前数组元素创建$sk
,其基本上如下:
Original string: HKCU:\SOFTWARE\MyKey\Test 1st iteration: HKCU:\ 2nd iteration: HKCU:\SOFTWARE\ 3rd iteration: SOFTWARE\MyKey\ 4th iteration: MyKey\Test\
你真正想要的是将当前数组元素连接到之前的所有内容,即连接到$sk
的当前值:
$sk += "\" + $SplitKey[$i]
或者您可以将数组元素连接到当前索引:
$sk = $SplitKey[0..$i] -join '\'
话虽如此,我个人更喜欢递归算法来创建路径。从完整路径遍历到最长的现有路径,然后在从递归调用返回时下降时创建缺少的文件夹:
function New-Key([string]$Path) {
$drive = Split-Path $Path -Qualifier
$parent = try { Split-Path $Path -NoQualifier | Split-Path -Parent } catch {}
if (-not (Test-Path -LiteralPath $Path)) {
New-Key (Join-Path $drive $parent)
New-Item -Type Directory -Path $Path
}
}