2016-11-09 100 views
1

當我執行下面的代碼時,假設X:\是一個多級目錄樹,它開始在第二遍時拋出奇怪的錯誤。丟失目錄級別的遞歸powershell目錄對象

例如,讓我們假設X:\具有以下結構

X:\ 
--1stLevelDir 
----2ndLevelDir 
--Another1stLevelDir 

function recurse{ 
    param([System.IO.FileSystemInfo] $folder) 
    foreach ($dir in GCI $folder -Directory) { 
     Write-Output $dir.FullName 
     recurse $dir 
    } 
} 

recurse (get-item 'X:\') 

該代碼產生以下輸出

X:\1stLevelDir 
X:\1stLevelDir\2ndLevelDir 
GCI : Cannot find path 'X:\2ndLevelDir' because it does not exist. 
At foreach line 

回答

2
recurse $dir.FullName 

[IO.DirectoryInfo]對象擴展到短名稱,這被視爲。相對路徑 - 看着你所在的文件夾中

編輯:或

function recurse{ 
    param([System.IO.FileSystemInfo] $folder) 
    foreach ($dir in GCI $folder.FullName -Directory) { 
     Write-Output $dir.FullName 
     recurse $dir 
    } 
} 

recurse (get-item 'X:\') 
+0

完美謝謝你,這個失去我的FileSystemInfo類型,但我可以沒有它的工作。出於好奇,有沒有一種方便的方法來保持該類型而不進行get-item調用? – Preston

+0

@Preston是的,將'.FullName'放在'gci'調用中,而不是在遞歸調用中。 – TessellatingHeckler