【问题标题】:Metadata export error when running on large directory structures在大型目录结构上运行时出现元数据导出错误
【发布时间】:2018-02-02 07:12:44
【问题描述】:

此脚本将 PowerShell 中的基本文件元数据导出为 .csv。

PS K:\> Get-childitem -recurse -file | select-object length,lastwritetime,fullname | export-csv filelist.csv -notypeinformation

它适用于 10-20K 文件的简单目录结构,但是当我在 500K+ 复杂、多级目录结构的文件上运行它时,它会冻结或给我错误:

At line:1 char:1
+ Get-childitem -recurse -file | select-object length,lastwritetime,ful ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (0:Int32) [], RuntimeException
    + FullyQualifiedErrorId : CallDepthOverflow

这是-recurse 的问题吗?使用 PowerShell 5 1(主要次要)。

【问题讨论】:

    标签: windows file powershell directory metadata


    【解决方案1】:

    测试文件路径有多长。

    如果文件路径超过 248 个字符...这可能就是您收到错误的原因。

    要检查是否有超过 248 个字符的返回,您可以这样做

    Get-childitem "filepath" -recurse  | % {
        $filepath = $_.FullName
        $charactercount = ($filepath | Measure-Object -Character).Characters
        If ($charactercount -gt 248){write-host $filepath}
    }
    

    【讨论】:

    • cmd /c dir /s /b |? {$_.length -gt 248}这是检查的好方法吗?
    • 我不是命令行专家,但我用你可以使用的 powershell 代码修改了我的答案。
    • 尝试了 1.5 TB、400K 的各种文件。它给出了一个带有 50K 行的 .csv 输出(用 Notepad++ 打开),但下面仍然有一条错误消息。 246 以上没有路径名。The script failed due to call depth overflow. At line:1 char:1 + Get-childitem -recurse -file | select-object length,lastwritetime,ful ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException + FullyQualifiedErrorId : CallDepthOverflow
    • 刚启动Get-childitem -recurse -file | select-object length,lastwritetime,fullname时是否出现错误?
    • 你成功了!谢谢。运行 w/o 导出(如您所建议的)显示“无限循环”挂起(同一组行在 powershell 窗口中一遍又一遍地重复。我去了那个问题目录,有一个奇怪的空目录,没有我删除的名称(零个字符)。此后,脚本和导出运行正常。所以你建议长路径名和一个异常目录是罪魁祸首。
    猜你喜欢
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2015-02-09
    • 2012-07-20
    相关资源
    最近更新 更多