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 的批处理文件的主要内容,如果未能解决你的问题,请参考以下文章