2016-01-24 77 views
0

我想要取一個變量,將其拆分,然後重新構建它,以便迭代地使用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合併到循環中,如果Test-Path失敗,則需要執行New-Item

任何人都可以幫助循環和逐步重建$SplitKey數組?

回答

1

這是什麼原因造成您的問題:

Original string: HKCU:\SOFTWARE\MyKey\Test 

1st iteration: HKCU:\ 
2nd iteration: HKCU:\SOFTWARE\ 
3rd iteration:   SOFTWARE\MyKey\ 
4th iteration:     MyKey\Test\

你真正想要的是:

$x = $i - 1 
$sk = $SplitKey[$x] + "\" + $SplitKey[$i] + "\" 

你只是從以前的和當前的數組元素,其基本工作原理是這樣創造$sk將當前數組元素連接到之前發生的所有事件,即到當前值$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 
    } 
} 
+0

謝謝,你即使有一個工作功能提供給我。非常感激! – d4rkcell