$ErrorActionPreference = 'Continue'
try
{
$fileEntries = [IO.Directory]::GetFiles("somedirectory", "*",[IO.SearchOption]::AllDirectories);
}
catch [Exception]
{
$_.Exception.Message
}
foreach($fileName in $fileEntries)
{
[Console]::WriteLine($fileName);
}
以上代码抛出异常
无法找到路径'\ blah \ dah \ dodah \ updity_and_suppy \ 03的一部分。 Docs hokeypokey \ imp \ lalalid \ welpy qwerty-poloky建筑 - tada sausy(来自互联网)todady poloky TPG upodsl poliduity \ B4PE to Y3 - E xternal asdfds polm toluky to Saftgy 3 yuppy App \ Old Docs'。
我对路径进行了一些模糊处理,但布局就在那里。
我尝试使用GetFiles而不是Get-ChildItem的原因是速度。我正在通过网络遍历可能的100兆兆字节,而Get-ChildItem在检索.Net对象时速度太慢,并且包含的信息超出了我的需要。
我问的问题是“使用类似> -ErrorAction SilentlyContinue的东西可以忽略此错误吗?”或“有没有办法阻止这种错误发生?”
感谢您的考虑。
答案 0 :(得分:0)
$ErrorActionPreference = 'Stop'
function recurse
{
param($path)
try
{
$fileEntries = [IO.Directory]::GetFiles($path)
[System.IO.DirectoryInfo]$directInf = New-Object IO.DirectoryInfo($path)
$folders = $directInf.GetDirectories()
}
catch [Exception]
{
$_.Exception.Message
$folders = @()
}
foreach($fileName in $fileEntries)
{
#[Console]::WriteLine($fileName);
}
Remove-Variable -ErrorAction SilentlyContinue -Name fileEntries
foreach($folder in $folders)
{
recurse($path + $folder + "\")
}
Remove-Variable -ErrorAction SilentlyContinue -Name folders
}
recurse #path that you wish to search
这可能不是最好的解决方案,但它会以递归方式遍历文件夹并获取文件名,比网络上的get-childitem快得多,并处理260以上路径抛出的异常并继续(它没有'解决问题,只是忽略并继续)。 Remove-Variable用于帮助解决内存问题,无论是否有帮助都是另一回事。