0%

批量重命名脚本-特例要求记录

记录一个批量重命名文件bat代码。该脚本主要功能是遍历当前目录中的所有文件,并将符合特定模式的文件名进行重命名,将类似 ASMR Rainbow Jelly-720 X 1280-2024-07-04-930d17d3fe662399f0ca12104d604fa5 重命名为 ASMR Rainbow Jelly-720 X 1280,舍弃-2024-07-04-930d17d3fe662399f0ca12104d604fa5日期和bash部分。

完整脚本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@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!"
)

判断 part3 是否存在且在 1900 到 2100 年之间,如果是,则生成新的文件名 new_filename;否则,保持原文件名不变。

命名文件

1
ren "!filename!" "!new_filename!" > nul 2>&1

结果判断:

1
2
3
4
5
6
7
8
9
10
if "!filename!"=="!new_filename!" (
echo !filename!:不需重命名
) else (

if !errorlevel! equ 0 (
echo !filename! 更名为 !new_filename!
) else (
echo !filename!重命名失败
)
)

使用方法

复制完整代码到文本文件,重命名为rename类型为bat。放到需要修改的文件同目录下,双击运行。

-------------本文结束感谢您的阅读-------------