我的某个目录里下(当前目录)有很多文件,有些文件名太长了
由于没学过batch ,来当伸手党了,顺便学习,谢谢!
求一个脚本,在当前目录执行,将目录下所有文件名长度超过20的,取前15位重命名。
如果某个文件前15位仍有重复,则按照每个文件 _1,_2,_3依次排列
比如a_1,a_2,b_1,b_2这样。
研究了半天,嵌套循环写不明白……,外层用for遍历每个文件。
内层循环我想要使用while,结果被告知必须用goto ,可是每当我用goto ,又会跳出外层循环,麻烦提供一个脚本,感谢!
我的某个目录里下(当前目录)有很多文件,有些文件名太长了
由于没学过batch ,来当伸手党了,顺便学习,谢谢!
求一个脚本,在当前目录执行,将目录下所有文件名长度超过20的,取前15位重命名。
如果某个文件前15位仍有重复,则按照每个文件 _1,_2,_3依次排列
比如a_1,a_2,b_1,b_2这样。
研究了半天,嵌套循环写不明白……,外层用for遍历每个文件。
内层循环我想要使用while,结果被告知必须用goto ,可是每当我用goto ,又会跳出外层循环,麻烦提供一个脚本,感谢!
@echo off
setlocal enabledelayedexpansion
cd /d "%~dp0"
for %%i in (*) do (
set "name=%%~ni"
set "ext=%%~xi"
if "!name:~20!" neq "" (
set "newname=!name:~0,15!"
set "num=1"
if not exist "!newname!!ext!" (
ren "%%i" "!newname!!ext!"
) else (
call :check_name
ren "%%i" "!newname!_!num!!ext!"
)
)
)
pause&exit
:check_name
if exist "!newname!_!num!!ext!" (
set /a "num+=1"
call :check_name
)
goto :eof