问题描述
问题
我一直在使用工具和方法(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