@echo off chcp 65001 > nul 2>&1 setlocal enabledelayedexpansion
REM 遍历当前目录中的所有文件 for %%f in (*.*) do ( set "filename=%%f" set "extension=%%~xf"
REM 判断是否为批处理文件,跳过 if /i "!extension!"==".bat" ( echo 跳过批处理文件: !filename! ) else ( REM 分割文件名 for /f "tokens=1,2,3,4 delims=-" %%a in ("!filename!") do ( set "part1=%%a" set "part2=%%b" set "part3=%%c" set "part4=%%d" REM 检查日期部分是否在指定年份范围内 if "!part3!" neq "" ( if "!part3!" gtr "1900" if "!part3!" lss "2100" ( set "new_filename=!part1!-!part2!" ) else ( set "new_filename=!filename!" ) ) else ( set "new_filename=!filename!" ) REM 如果新旧文件名相同,则输出无需重命名信息 if "!filename!"=="!new_filename!" ( echo !filename!:不需重命名 ) else ( REM 尝试重命名文件 ren "!filename!" "!new_filename!" > nul 2>&1 if !errorlevel! equ 0 ( echo !filename! 更名为 !new_filename! ) else ( echo !filename!重命名失败 ) ) ) ) )
echo 批量更名完成,bat from CRF %TIME% !! pause
脚本解析
初始化部分
1 2 3
@echo off chcp 65001 > nul 2>&1 setlocal enabledelayedexpansion
@echo off:关闭命令回显。
chcp 65001 > nul 2>&1:将代码页设置为 UTF-8,防止出现乱码。
setlocal enabledelayedexpansion:启用延迟变量扩展,允许在 for 循环中使用 ! 来引用变量。
遍历当前目录中的所有文件
1 2 3 4
for %%f in (*.*) do ( set "filename=%%f" set "extension=%%~xf" )
跳过批处理文件
1 2 3 4 5
if /i "!extension!"==".bat" ( echo 跳过批处理文件: !filename! ) else ( if /i "!extension!"==".bat":判断当前文件是否为批处理文件(忽略大小写)。 echo 跳过批处理文件: !filename!:如果是批处理文件,则输出提示信息并跳过后续操作。
分割文件名
1 2 3 4 5
for /f "tokens=1,2,3,4 delims=-" %%a in ("!filename!") do ( set "part1=%%a" set "part2=%%b" set "part3=%%c" set "part4=%%d"
for /f “tokens=1,2,3,4 delims=-“ %%a in (“!filename!”) do:将文件名按 - 进行分割,并分别保存到 part1, part2, part3, part4 四个变量中。
检查日期部分是否在指定年份范围内
1 2 3 4 5 6 7 8 9
if "!part3!" neq "" ( if "!part3!" gtr "1900" if "!part3!" lss "2100" ( set "new_filename=!part1!-!part2!" ) else ( set "new_filename=!filename!" ) ) else ( set "new_filename=!filename!" )