Get-FolderItem version 获取所有文件夹

Get-FolderItem version to get all folders

我找到了一个 cmdlet,它 return 可以处理所有文件而不考虑路径大小。我想知道是否有一个等效的命令可以获取所有文件夹而不考虑路径大小?

Get-FolderItem 将 robocopy 和 powershell 组合到 return 所有文件,即使是路径大于 260 的文件。

有没有办法获取文件共享中的所有文件夹

Get-FolderItem 使用 robocopy 开关 /NDL 从日志输出中排除目录,它用来获取文件信息。它还通过使用 /S 开关递归而不是 /E

来避免空文件夹

只需将 $params 变量从:

$params.AddRange(@("/L","/S","/NJH","/BYTES","/FP","/NC","/NDL","/TS","/XJ","/R:0","/W:0"))

$params.AddRange(@("/L","/E","/NJH","/BYTES","/FP","/NC","/NFL","/TS","/XJ","/R:0","/W:0"))

现在,Robocopy 将列出目录,而不是文件。由于目录的输出与文件略有不同,因此您还必须稍微更改解析逻辑。

改变

If ($_.Trim() -match "^(?<Size>\d+)\s(?<Date>\S+\s\S+)\s+(?<FullName>.*)") {
    $object = New-Object PSObject -Property @{
        ParentFolder = $matches.fullname -replace '(.*\).*',''
        FullName = $matches.FullName
        Name = $matches.fullname -replace '.*\(.*)',''
        Length = [int64]$matches.Size
        LastWriteTime = [datetime]$matches.Date
        Extension = $matches.fullname -replace '.*\.(.*)',''
        FullPathLength = [int] $matches.FullName.Length
    }
    $object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
    Write-Output $object
}

If ($_.Trim() -match "^(?<Children>\d+)\s+(?<FullName>.*)") {
    $object = New-Object PSObject -Property @{
        ParentFolder = $matches.fullname -replace '(.*\).*',''
        FullName = $matches.FullName
        Name = $matches.fullname -replace '.*\(.*)',''
    }
    $object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
    Write-Output $object
}

应该就可以了