隔离Windows 7文件路径超过长度限制256-PathTooLongException

问题描述

问题 我一直在使用工具和方法robocopy +流行的云服务等)的组合来同步Win 7计算机上的驱动器和目录。但是,我有一些路径和文件名超过length=256,显然,它们无法处理(并且似乎在破坏整个操作)。遇到的异常是PathTooLongException

所需的解决方案: 我想创建一个批处理文件,该文件标识D:\上的路径/文件名组合超过200(如果更简单,则为> 256)。将匹配的文件路径输出D:\toolong.txt,每行一个(首选每个唯一的文件路径,但输出所有文件路径/名称都可以)。我的目的是手动查看结果,以了解此类巨大路径/名称的位置和存在方式(然后考虑解决策略)

在这里潜伏了多年,但从未发布过-请保持友善

解决方法

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

仅文件夹:

@(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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...