Powershell 由于深度超过255个字符,无法获取最大文件的总和?
当目录路径超过255个字符时,文件大约超过300万个字符时,如何获得以下脚本的结果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
(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或更高版本,请尝试。