我正在尝试在扫描文件夹时处理错误。让我们说我有类似的东西:
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 :(得分:3)
如果您可以安装非古老的PowerShell版本(3.0或更高版本),只需在路径前添加\\?\
即可克服完整路径的260个字符限制:
Get-ChildItem "\\?\$somepath" | ForEach {
# ............
}
答案 1 :(得分: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}
答案 2 :(得分:0)
我将添加我的解决方案,因为此页面上的任何一个都不适合我。我使用的是相对路径,所以我不能使用 \\
前缀。
$TestFiles = Get-ChildItem $pwd "*Tests.dll" -Recurse | Where-Object {$_.FullName.length -lt 261} | Select-Object FullName -ExpandProperty FullName | Where-Object FullName -like "*bin\Release*"
Write-Host "Found TestFiles:"
foreach ($TestFile in $TestFiles) {
Write-Host " $TestFile"
}