所以我的问题是我正在使用批处理文件移动所有电影,图像等 . 我用它来组织一个超过20GB的超大硬盘 . 所以一切都工作正常,直到我有一个新的硬盘驱动器 . 我收到文件错误,说文件名很长 . 所以我的想法是检查文件名是否超过250个字符,如果是,那么将文件重命名为仅200,只留下文件扩展名 . 我附上了我正在使用的当前代码,以使其成为可能 . 我的问题是如何使这成为可能 . 我想在if之前添加一个if命令,但是如果检查文件名中的字符却难以接受?任何帮助将不胜感激!
@echo off
setlocal EnableDelayedExpansion
set TESTFOLDER=L:\AllMovies
md "%TESTFOLDER%"
for /f "tokens=*" %%i in ('dir /s /ah /b /a-d L:\*.mov or L:\*.mp4') do (
call :copyfile "%%~i"
)
goto :eof
:copyfile
set fname=%~nx1
set counter=0
if not exist "%TESTFOLDER%\%dest%\!fname!" goto docopy
:recheck
if exist "%TESTFOLDER%\%~n1_!counter!%~x1" (
set /a counter+=1
goto recheck
)
set fname=%~n1_copy!counter!%~x1
:docopy
copy "%~1" "%TESTFOLDER%\%dest%\!fname!"
goto :eof
endlocal
1 回答
您始终可以将
\\?\
添加到文件名以忽略文件名检查 . Windows支持最高32K的文件名 . 但是,程序往往只支持路径的总共260个字符(其中名称最多为255个字符) .将您的名字写入文件然后读取文件大小,它将是文件名大小 .