路径长度大于 x 的输出文件

Posted

技术标签:

【中文标题】路径长度大于 x 的输出文件【英文标题】:Output files with path length greater than x 【发布时间】:2017-05-23 21:47:18 【问题描述】:

我正在尝试将网络驱动器上路径长度大于 x(当前为 250)的所有文件输出到文本文件。

我一直在尝试使用以下重新发布的解决方案:

How do I find files with a path length greater than 260 characters in Windows?

In powershell cmd /c dir /s /b |? $_.length -gt 250

这个解决方案似乎可行,但有两个问题:

显示在 Powershell 窗口中,不输出到文件中 Powershell 格式化窗口结果,以便一个文件路径显示在多行中。我尝试将 Powershell 中的结果复制并粘贴到 Excel 文档中,但它们在 Excel 中也被粘贴在多行中,并且我需要将每个文件路径放在一行中

我已将 rerun 提供的此解决方案更改为以下内容:

cmd /c dir /s /b |? $_.length -gt 250 | Out-File C:\results.txt -width 1500

这现在解决了上述两个问题,但我遇到了另一个问题。当我运行它时,我在 Powershell 窗口中收到一条错误消息,说“目录名称 xxxxxxxx 太长”。检查文件显示并非所有文件都已输出到它。请问有人知道我如何实现这一目标吗? 干杯

【问题讨论】:

如果您正在寻找 Powershell 解决方案,为什么要从 cmd.exe 运行 dir 我只是按照 rerun 提供的解决方案,因为我真的不知道还能做什么。但我也不太熟悉 Powershell 或 cmd.exe 命令,所以想试一试 【参考方案1】:

所以基本上你将无法重命名或更改文件的属性,因为文件名太长了。

简化的解决方案是重命名文件:

big_named_file 所在的同一位置创建一个 winrar 文件

然后按向上按钮,您应该可以在 winrar 控制台中看到您的 big_named_file

在此处按 F2 即可,您可以重命名它。

注意:您的文件太长问题可以这样解决。

【讨论】:

我无法重命名文件,因为我正在寻找要重命名的文件。我不知道他们在哪里。该驱动器大小超过 TB,包含数十万个文件,因此很难手动找到。 @Naz :由于文件名太长,几乎所有脚本都不会在这里工作。再加上火,你有一个 TB 的大小,所以唯一剩下的选择就是以某种方式重命名它。这是我建议重命名它的最佳方式。我不认为是否有任何其他方法可以解决它。寻找一些至少可以重命名部分的第三方工具。只有在那之后,powershell 才能参与进来。 嗨 Ranadip,我不知道文件在哪里可以重命名,所以我无法使用这种方法重命名它们。首先我需要知道它们都在哪里,这就是为什么我在寻找一个能够告诉我的 Powershell 脚本 @Naz :现在看起来像一个严重的问题。搜索了一些第三方工具?没有别的我能想到的,好像现在【参考方案2】:

不要退出旧的 cmd,而是使用 get-childitem 将文件路径存储在 $files 变量中,然后你可以以任何你喜欢的方式将其转储到文件中,我使用 export-csv 作为你似乎想在 Excel 中看到它。

$files = Get-ChildItem 'yourpath' -recurse | where $_.fullname.length -gt 250 | select -ExpandProperty fullname
$files | export-csv 'yourfilename' -noclobber

【讨论】:

我在 Powershell 中运行此命令时出现错误:Get-ChildItem : 指定的路径、文件名或两者都太长。完全限定文件名必须少于 260 个字符,目录名必须少于 248 个字符。在 line:1 char:10 + $files = Get-ChildItem '\\server\folder' -recurse |其中$_.full ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo : ReadError: (\\server\fold...itch - 19.12.12:String) [Get-ChildItem], PathTooLongException + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand【参考方案3】:

这并不是真正的 PowerShell 解决方案。取而代之的是,试试这个递归遍历网络路径并将长文件输出到longfiles.txt

gci \\someserver\somedir -r | ?  $_.FullName.length -gt 250  | select -expandproperty fullname > longfiles.txt

【讨论】:

我在 Powershell 中运行此命令时出现错误: gci : 指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。在 line:1 char:1 + gci \\server\folder -r | ? $_.FullName.length -gt 250 |选择 ... + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ReadError: (\\server\fold...stem - 21.09.12: String) [Get-ChildItem], PathTooLongException + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand

以上是关于路径长度大于 x 的输出文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux根据名称长度查找文件和文件夹但输出完整路径

linux每日命令:which

X的因子链(分解质因数,)

断点续传

「考试」省选50

源文件名长度大于系统支持的长度