批处理工具
发表于:2025-09-08 | 分类: Windows10 Bat
字数统计: 1k | 阅读时长: 5分钟 | 阅读量:

重命名工具

查看代码
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 设置标题
title 文件重命名工具

:: 创建临时VBScript文件处理正则表达式
echo Set objRegExp = New RegExp > "%temp%\regex_rename.vbs"
echo objRegExp.Global = True >> "%temp%\regex_rename.vbs"
echo objRegExp.IgnoreCase = False >> "%temp%\regex_rename.vbs"
echo strPattern = WScript.Arguments(0) >> "%temp%\regex_rename.vbs"
echo strText = WScript.Arguments(1) >> "%temp%\regex_rename.vbs"
echo objRegExp.Pattern = strPattern >> "%temp%\regex_rename.vbs"
echo If objRegExp.Test(strText) Then >> "%temp%\regex_rename.vbs"
echo set matches = objRegExp.Execute(strText) >> "%temp%\regex_rename.vbs"
echo group0 = matches(0).SubMatches(0) >> "%temp%\regex_rename.vbs"
echo group3 = matches(0).SubMatches(3) >> "%temp%\regex_rename.vbs"
echo group2 = matches(0).SubMatches(2) >> "%temp%\regex_rename.vbs"
echo WScript.Echo "MATCH:" ^& group0 ^& "|" ^& group3 ^& "|" ^& group2 >> "%temp%\regex_rename.vbs"
echo Else >> "%temp%\regex_rename.vbs"
echo WScript.Echo "NO_MATCH" >> "%temp%\regex_rename.vbs"
echo End If >> "%temp%\regex_rename.vbs"

:: 提示用户输入参数
echo.
echo ================================================
echo 文件重命名工具
echo ================================================
echo * 执行前务必先备份!
echo * 仅处理指定目录下的所有文件,不包含子目录
echo * 目标路径默认: D:\WorkSpace\files\
echo * 匹配规则默认: ^(\d{4})-(\d{2})-\d{2}\s+(bad debt provision)_(\d+)$
echo * 替换规则默认: $1-$4 $3
echo ================================================
echo.

set "defaultDir=D:\WorkSpace\files\"
set "defaultMatch=^(\d{4})-(\d{2})-\d{2}\s+(bad debt provision)_(\d+)$"
set "defaultReplace=$1-$4 $3"

echo.

:: 处理正则表达式输入(为空则使用默认)
set /p "targetDir=目标目录路径 (直接回车使用默认): "
if "!targetDir!"=="" (
echo - 默认:!defaultDir!
set "targetDir=!defaultDir!"
)
echo.

set /p "matchRegex=匹配正则 (直接回车使用默认): "
if "!matchRegex!"=="" (
echo - 默认:!defaultMatch!
set "matchRegex=!defaultMatch!"
)
echo.

set /p "replaceRegex=替换匹配 (直接回车使用默认): "
if "!replaceRegex!"=="" (
echo - 默认:!defaultReplace!
set "replaceRegex=!defaultReplace!"
)
echo.
echo.

:: 处理目录路径
set "targetDir=!targetDir:/=\!"
if "%targetDir%"=="" (
color 04
echo 错误:目标目录路径为空!
del "%temp%\regex_rename.vbs" >nul 2>&1
pause
exit /b 1
)

if "%targetDir:~-1%" neq "\" set "targetDir=%targetDir%\"

:: 检查目标目录是否存在
if not exist "%targetDir%" (
color 04
echo 错误:目标目录不存在!
del "%temp%\regex_rename.vbs" >nul 2>&1
pause
exit /b 1
)

:: 初始化计数器
set "successCount=0"
set "failCount=0"
set "noMatchCount=0"


:: 处理目标目录中的所有文件(不包含子目录)
echo ==================== START ====================

for /f "delims=" %%f in ('dir /b /a-d "%targetDir%\*" 2^>nul') do (
set "fileName=%%~nf"
set "fileExt=%%~xf"
set "fullPath=%targetDir%\%%f"

echo * 开始处理文件:%%f

:: 调用VBScript进行正则匹配和替换
for /f "delims=" %%r in ('cscript //nologo "%temp%\regex_rename.vbs" "%matchRegex%" "!fileName!"') do (
set "result=%%r"
)

:: 处理结果
if "!result:~0,5!"=="MATCH" (
set "parsedResult=!result:MATCH:=!"

for /f "tokens=1,2,3 delims=|" %%a in ("!parsedResult!") do (
set "year=%%a"
set "month=%%b"
set "label=%%c"
if "!month:~1!"=="" (
set "month=0!month!"
)
)

set "newFileName=!year!-!month! !label!"
set "newFullPath=%targetDir%\!newFileName!!fileExt!"

:: 检查新文件名是否与原文件名相同
if "!fileName!!fileExt!" equ "!newFileName!!fileExt!" (
echo - 跳过,替换后文件名不变
set /a failCount+=1
) else (
:: 检查新文件是否已存在
if exist "!newFullPath!" (
echo - 失败,目标文件已存在
set /a failCount+=1
) else (
:: 执行重命名
ren "!fullPath!" "!newFileName!!fileExt!" >nul 2>&1
if !errorlevel! equ 0 (
echo - 成功,!newFileName!!fileExt!
set /a successCount+=1
) else (
echo - 失败,重命名过程出错
set /a failCount+=1
)
)
)
) else (
:: 未匹配到
echo - 未匹配
set /a noMatchCount+=1
)
)

:: 清理临时文件
del "%temp%\regex_rename.vbs" >nul 2>&1

echo ==================== RESULT ====================
echo 成功:%successCount%
echo 失败:%failCount%
echo 未匹配:%noMatchCount%
echo ===================== END ======================
echo.
pause
endlocal

后台运行命令

查看代码
1
2
3
4
5
6
7
8
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
::下面是你自己的代码。

cd /d %cd%\nexus-3.4.0-02\bin
nexus.exe /run
上一篇:
资产(官方)
下一篇:
缓存系统