Powershell 由于深度超过255个字符,无法获取最大文件的总和?

Powershell 由于深度超过255个字符,无法获取最大文件的总和?,powershell,robocopy,Powershell,Robocopy,当目录路径超过255个字符时,文件大约超过300万个字符时,如何获得以下脚本的结果 (Get-ChildItem N:\Shared Folder\Replicated Files -recurse | Sort-Object length -descending | select-object -first 32 | measure-object -property length -sum).sum /1gb 我得到的错误是: Get-ChildItem : Could not find

当目录路径超过255个字符时,文件大约超过300万个字符时,如何获得以下脚本的结果

 (Get-ChildItem N:\Shared Folder\Replicated Files -recurse | Sort-Object length -descending | select-object -first 32 | measure-object -property length -sum).sum /1gb 
我得到的错误是:

Get-ChildItem : Could not find a part of the path 'N:\Shared Folder\Replicated Files...'.
At line:1 char:3
+  (Get-ChildItem N:\Shared Folder\Replicated Files -recurse | Sort-Object length -de ...
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (N:\Shared Folder\Replicated Files) [Get-ChildItem], DirectoryNotFoundException
    + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand

robocopy
命令支持长度超过255个字符的文件路径。您可以使用
\L
参数仅将找到的文件(及其大小)列出到输出流中。添加一些其他参数以清理输出(例如
\BYTES
以字节形式显示大小-有关所有这些参数的解释,请参阅)

这将为您提供以下命令,以获取所有文件及其大小(以字节为单位)的列表:

robocopy /L /E /ndl /njh /njs /bytes "N:\Shared Folder\Replicated Files" nocopy
这将为您提供如下输出:

        New File                     154        C:\Temp\file1.tmp
        New File                 1878884        C:\Temp\file2.tmp
        New File                  119465        C:\Temp\file3.tmp
然后,您可以使用正则表达式解析文件大小,并使用您的方法进行排序和添加,我们得到以下结果:

(robocopy /L /E /ndl /njh /njs /bytes "N:\Shared Folder\Replicated Files" nocopy | %{if($_ -match "New File\W*(\d*)\W*([\w:\\\.]*)"){[int32]$matches[1]}} | sort -Descending | select -first 32 | measure -sum | select -expand Sum) / 1gb

不是很优雅,但应该可以使用。

robocopy命令支持长度超过255个字符的文件路径。您可以使用
\L
参数仅将找到的文件(及其大小)列出到输出流中。添加一些其他参数以清理输出(例如
\BYTES
以字节形式显示大小-有关所有这些参数的解释,请参阅)

这将为您提供以下命令,以获取所有文件及其大小(以字节为单位)的列表:

robocopy /L /E /ndl /njh /njs /bytes "N:\Shared Folder\Replicated Files" nocopy
这将为您提供如下输出:

        New File                     154        C:\Temp\file1.tmp
        New File                 1878884        C:\Temp\file2.tmp
        New File                  119465        C:\Temp\file3.tmp
然后,您可以使用正则表达式解析文件大小,并使用您的方法进行排序和添加,我们得到以下结果:

(robocopy /L /E /ndl /njh /njs /bytes "N:\Shared Folder\Replicated Files" nocopy | %{if($_ -match "New File\W*(\d*)\W*([\w:\\\.]*)"){[int32]$matches[1]}} | sort -Descending | select -first 32 | measure -sum | select -expand Sum) / 1gb

不是很优雅,但它应该可以工作。

如果运行Windows 10 1607或更高版本,请尝试。如果运行Windows 10 1607或更高版本,请尝试。