Windows 文件 PathTooLongException:用于识别文件路径长于 255 的批处理文件

Posted

技术标签:

【中文标题】Windows 文件 PathTooLongException:用于识别文件路径长于 255 的批处理文件【英文标题】:Windows file PathTooLongException: Batch file to Identify filepaths longer than 255 【发布时间】:2021-02-22 09:21:36 【问题描述】:

问题 我有一些超过length=255 的文件路径,显然在我的Windows 7 机器上的文件同步操作期间无法处理(并且似乎会中断整个操作)。遇到的异常是PathTooLongException

所需的解决方案: 我想创建一个批处理文件来识别超过 255 的文件路径,并将它们输出到 .txt 文件(用于诊断审查)

更新 下面接受的解决方案完美运行。

这是我在这里的第一篇文章;请善待

【问题讨论】:

非常长的路径,(> 256 个字符),在 RoboCopy 中默认开启支持,因为您需要 /256 选项来关闭它。您能否提供一些代码和正确的路径,以便我们可以尝试重现您所说的问题。 我误以为 robocopy 是错误的根源。我遇到了异常“PathTooLongException docs.microsoft.com/en-us/dotnet/api/… 那么您的问题对我们或未来的读者都没有用。我建议您简单地删除您的问题,而不是您糟糕的编辑和删除 [robocopy] 标签。在当前格式下,您似乎正在寻找离题研究材料或链接,或者正在提出离题代码请求。 感谢您的反馈(并为以后的发布注明)。我以一种对其他人更有用的方式修改了我的问题(将注意力转向包含人们可能正在寻找的代码的选定答案) 【参考方案1】:

您只想要路径(超过 255 个字符的目录路径)还是组合文件名和文件夹路径

只是文件夹:

@(Setlocal enabledelayedexpansion
  Echo off
  Set "_Root=D:\"
  Set "_ResultFile=D:\PathsOver255Chars.txt"
)

CALL :Main

( Endlocal
  Exit /B
)

:Main
  For /F "Tokens=*" %%_ IN ('
    Dir /B /S /AD "%_Root%*"
  ') DO (
    SET "_CheckLen=%%_"
    IF /I !_CheckLen! NEQ !_CheckLen:~-255! (
      ECHO=%%_>>"%_ResultFile%"
    )
  )
GOTO :EOF

只是文件:

@(Setlocal enabledelayedexpansion
  Echo off
  Set "_Root=D:\"
  Set "_ResultFile=D:\PathsOver255Chars.txt"
)

CALL :Main

( Endlocal
  Exit /B
)

:Main
  For /F "Tokens=*" %%_ IN ('
    Dir /B /S /A-D-S-H "%_Root%*"
  ') DO (
    SET "_CheckLen=%%_"
    IF /I !_CheckLen! NEQ !_CheckLen:~-255! (
      ECHO=%%_>>"%_ResultFile%"
    )
  )
GOTO :EOF

文件夹和文件

@(Setlocal enabledelayedexpansion
  Echo off
  Set "_Root=D:\"
  Set "_ResultFile=D:\PathsOver255Chars.txt"
)

CALL :Main

( Endlocal
  Exit /B
)

:Main
  For /F "Tokens=*" %%_ IN ('
    Dir /B /S  "%_Root%*"
  ') DO (
    SET "_CheckLen=%%_"
    IF /I !_CheckLen! NEQ !_CheckLen:~-255! (
      ECHO=%%_>>"%_ResultFile%"
    )
  )
GOTO :EOF

【讨论】:

这是一个令人印象深刻的答案,谢谢。识别文件路径+文件名 > 255 是目标,尽管对于输出而言,仅识别相应的文件夹就足够了(我的目的是手动查看特别长的文件路径列表。输出到文本文件是理想的,谢谢。 我有 13 个,需要 15 个:/ 不过,它让我可以在内部投票,因此您可以在某种程度上获得算法提升——只是还不允许我影响显示的投票。 @derekclark 啊,明白了,我想我加入时是 10 点,或者我记错了,也许那是从 10 点开始的评论。无论哪种方式,感谢您的支持。此外,在这个级别的点上,您似乎没有得到评论支持,也许是因为我支持了该评论并且您的观点没有改变,所以我想下次您问/回答 Q 时,它会自己动摇. 我终于有资格验证你的答案了 :) 我还可以补充一点,代码成功识别了大约 500 个文件路径,所有这些都可以通过一些移动(安装)来解决

以上是关于Windows 文件 PathTooLongException:用于识别文件路径长于 255 的批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

什么是Windows的文件夹?

Linux怎样访问Windows共享文件和文件夹

在windows中,文件名的最大长度为啥?

c/windows 里的文件详细的介绍下?

windows内核文件在哪

怎样用Samba实现windows和linux之间文件的网络访问