我需要将两件事放入.bat
我正在为一个小项目处理的文件中。首先,我必须知道我启动的同一个文件夹中包含的任何文件名(递归).bat
是否超过 100 个字符。如果是这样,我需要使其长度为 92 个字符并保留扩展名。
例如,我有这个文件名:
IncrediblyLongFileNameIAmSorryForThisItLooksLikeSomeDamnSpamJesusIAintEvenCloseTo100yetalmostwaitforitYEAH.omg
上面的文件名是 110 个字符。我需要保留扩展名,因此程序应将文件重命名为:
IncrediblyLongFileNameIAmSorryForThisItLooksLikeSomeDamnSpamJesusIAintEvenCloseTo100yetalmos.omg
到目前为止,我的主要问题是我不知道如何批量处理文件名字符串。我使用了这段代码:
@echo off & setlocal enableextensions
FOR /R %%i IN (*.*) DO (
ECHO %%~nxi
FOR /f "delims=:" %%a in ('
^(echo."%%~nxi"^& echo.^)^|findstr /o .'
) DO set lenght=%%a-5
echo The length of "%%~nxi" is %lenght%
)
endlocal & goto :EOF
但是我不能SET
在 a 里面FOR
,它也不能做基本的数学运算(即它不能做-5
运算)。
第二件事,我认为一旦完成第一件事应该会更容易,就是简单地比较文件夹中的所有文件名(再次递归)并确保没有文件名相同。如果程序发现任何相同的文件名,则应重命名第二次出现以l1l
在末尾添加类似的内容。(我这里不能用括号,所以我用两个l
s 代替数字。)你唯一需要注意的是文件扩展名,因为我不能在文件扩展名后面添加任何东西,以免它们变成无法使用。
谁能解释如何做到这一点?我真的很想自己解决这个问题,但我只是缺乏批处理编程的经验。