找不到路径Exception Thrown的一部分

时间:2013-02-12 05:28:50

标签: .net powershell

$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的东西可以忽略此错误吗?”或“有没有办法阻止这种错误发生?”

感谢您的考虑。

1 个答案:

答案 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用于帮助解决内存问题,无论是否有帮助都是另一回事。