【问题标题】:Get-FolderItem version to get all foldersGet-FolderItem 版本获取所有文件夹
【发布时间】:2015-12-02 02:45:24
【问题描述】:

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

Get-FolderItem 结合 robocopy 和 powershell 来返回所有文件,即使是路径大于 260 的文件。

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

【问题讨论】:

    标签: powershell robocopy


    【解决方案1】:

    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 '(.*\\).*','$1'
            FullName = $matches.FullName
            Name = $matches.fullname -replace '.*\\(.*)','$1'
            Length = [int64]$matches.Size
            LastWriteTime = [datetime]$matches.Date
            Extension = $matches.fullname -replace '.*\.(.*)','$1'
            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 '(.*\\).*','$1'
            FullName = $matches.FullName
            Name = $matches.fullname -replace '.*\\(.*)','$1'
        }
        $object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
        Write-Output $object
    }
    

    应该这样做

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2015-08-30
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多