如何列出长度超过248的路径?

时间:2015-12-10 13:22:30

标签: powershell

我需要创建此列表以允许其他程序正常工作。我使用这段代码:

function analyse {

    Param(
        [parameter(Mandatory=$true)]
        [String]$newPath
    )

    cd $newPath

    dir | Foreach-Object {
        $data = Get-Content -Path o:\******\public\ParcoursArborescence\Limitless\data.txt
        if ($_.PsisContainer -eq $True) {
            $testPath = $_.FullName + ";"
            $name = $testPath
            $testPath = $data -match [regex]::escape($testPath)
            $testpath

            if($testPath.Length -eq 0) {
                $name | Out-File -Append "o:\******\public\ParcoursArborescence\Limitless\data.txt"
                if ($_.FullName.Length -gt 248) {
                    "ecriture"
                    $result += $_.FullName + "`r"
                } else {
                    "nouvelle analyse"
                    $_.Fullname
                    analyse $_.FullName
                }
            }
        } else {
            $testPath = $_.Directory.FullName + ";"
            $name = $testPath
            $testPath = $data -match [regex]::escape($testPath)

            if($testPath.Length -eq 0) {
                $name | Out-File -Append "o:\******\public\ParcoursArborescence\Limitless\data.txt"
                $_.FullName.Length
                if ($_.FullName.Length -gt 260) {
                    "ecriture2"
                    $result += $_.Directory.Name + "`r"
                }
            }
        }
    } 
    $result | Out-File -Append "o:\******\public\ParcoursArborescence\Limitless\bilanLimitless.txt" 
}

但这需要花费数小时......我需要在数千个文件夹中使用它。那么,你对它如何变得更快有任何想法吗?

1 个答案:

答案 0 :(得分:1)

也许我在这里过分简化了一些事情,但为什么不一次列出所有文件,并测试他们的FullName Length-File Get-ChildItem参数所需的PS 3.0 {1}})?

$maxLength = 248

Get-ChildItem $newPath -Recurse |
    Where-Object { ($_.FullName.Length -gt $maxLength) } |
    Select-Object -ExpandProperty DirectoryName -Unique |
    Out-File "overlength_paths.txt"

对于PS 2.0:

$maxLength = 248

Get-ChildItem $newPath -Recurse -File |
    Where-Object { ($_.FullName.Length -gt $maxLength) -and (-not $_.PSisContainer) } |
    Select-Object -ExpandProperty DirectoryName -Unique |
    Out-File "overlength_paths.txt"