2016-09-23 45 views
0

我試圖在掃描文件夾時處理錯誤。比方說,我有這樣的事情:使用長文件路徑時Get-ChildItem錯誤處理

Get-ChildItem $somepath -Directory | ForEach-Object { 
    if(error occurred due to too long path) { 
     skip this folder then 
    } else { 
     Write-Host $_.BaseName 
    } 
} 

當我做到這一點我打印的文件夾中$somepath直到其中的一個是太長,則循環停止。即使使用SilentlyContinue。即使到達太長的文件夾,我也想打印。

+0

不要問你的問題再次發佈。 http://stackoverflow.com/questions/39572006/error-handling-a-too-long-path-in-a-foreach-object-loop-in-powershell – Matt

+1

你可以處理這個異常:[System.IO.PathTooLongException ] –

回答

0

通過使用Where-Object cmdlet,您可以嘗試忽略長260個字符的文件。

Get-ChildItem $somepath -Directory -ErrorAction SilentlyContinue ` 
    | Where-Object {$_.length -lt 261} ` 
    | ForEach-Object { Write-Host $_.BaseName } 

或者您可以使用以下(Ref)。

cmd /c dir $somepath /s /b | Where-Object {$_.length -lt 261} 
+0

即使使用SilentlyContinue,我也寫了:(然後它只是不打印錯誤,但它不會打印超出這個點的數字。 –

+0

@ BenjaminS.Sorterup我已經更新了我的答案。 – Richard

2

如果你可以安裝一個非古PowerShell的版本(3.0或更新版本),只是前面加上\\?\的路徑,克服完整路徑的260個字符的限制:

Get-ChildItem "\\?\$somepath" | ForEach { 
    # ............ 
} 
+0

我必須找到一個參考,但我是 – Matt

+1

可能在我的無知,但我得到的錯誤運行此:'路徑中的非法字符.'或'無法檢索cmdlet的動態參數.' .... – Matt

+0

PS5.1 + Win7 :https://puu.sh/rlaUh/748082bbdb.png是的,它不會在PS2中工作,因爲我剛剛嘗試過運行'powershell -version 2' – wOxxOm