2025 ChatGPT Plus 镜像在线使用=>银河镜像版
平时用 电脑管理文件的时候,你是不是也遇到过这种情况:一大堆文件名字都差不多,但中间有个地方想统一改掉?比如想把文件名里的“v1”都换成“v2”。要是一个个点进去改,真的是又慢又容易搞错。
其实可以在不安装第三方软件的前提下,系统自带的 CMD 就能搞定这事。下面我来分享教程,让你以后再也不用手动重命名上百个文件了。
首先,创建一个txt文件,复制并粘贴以下代码
@echo off
chcp 65001 >nul
@echo off
:: =========================================================
:: 递归批量重命名(当前目录及所有子目录)
:: 功能:
:: - 自动递归所有子目录
:: - 仅输入旧字符串和新字符串
:: - 输出完整日志至 RenameLog.txt
:: =========================================================
setlocal EnableExtensions EnableDelayedExpansion
:: chcp 65001 >nul
:: ---- 初始化 ----
set "LOGFILE=%cd%\RenameLog.txt"
echo ========================================================= > "%LOGFILE%"
echo 批量重命名日志 - %date% %time% >> "%LOGFILE%"
echo 根目录:%cd% >> "%LOGFILE%"
echo ========================================================= >> "%LOGFILE%"
echo. >> "%LOGFILE%"
echo.
echo ============ 批量重命名(当前目录 + 子目录) ============
echo 根目录:%cd%
echo 说明:仅替换“文件名不含扩展名”的部分,扩展名保持不变。
echo.
set /p "OLD=请输入要替换的旧字符串(必填): "
if not defined OLD (echo [错误] 旧字符串不能为空! & goto :END)
set /p "NEW=请输入新的字符串(可留空=删除旧串): "
echo.
echo 正在处理,请稍候……
echo ---------------------------------------------------------
echo [开始时间] %date% %time% >> "%LOGFILE%"
echo 旧字符串:"%OLD%" >> "%LOGFILE%"
echo 新字符串:"%NEW%" >> "%LOGFILE%"
echo --------------------------------------------------------- >> "%LOGFILE%"
set /a TOTAL=0, CHANGED=0, SKIPPED=0, CONFLICT=0
:: 遍历所有文件(递归)
for /r %%F in (*.*) do call :PROCESS "%%~fF"
echo --------------------------------------------------------- >> "%LOGFILE%"
echo [结束时间] %date% %time% >> "%LOGFILE%"
echo 总计文件:%TOTAL% >> "%LOGFILE%"
echo 已修改数:%CHANGED% >> "%LOGFILE%"
echo 跳过数 :%SKIPPED% >> "%LOGFILE%"
echo 冲突数 :%CONFLICT% >> "%LOGFILE%"
echo --------------------------------------------------------- >> "%LOGFILE%"
echo ---------------------------------------------------------
echo 处理完成!
echo 总计文件数: %TOTAL%
echo 已修改文件: %CHANGED%
echo 无需修改数: %SKIPPED%
echo 冲突文件数: %CONFLICT%
echo ---------------------------------------------------------
echo 日志文件:%LOGFILE%
echo.
pause
goto :END
:PROCESS
set "FULL=%~1"
if not exist "%FULL%" goto :EOF
:: 排除目录
for %%A in ("%FULL%") do set "ATTR=%%~aA"
if /I "!ATTR:~0,1!"=="d" goto :EOF
set /a TOTAL+=1
set "DIR=%~dp1"
set "NAME=%~n1"
set "EXT=%~x1"
set "NEWNAME=!NAME:%OLD%=%NEW%!"
if "!NEWNAME!"=="!NAME!" (
set /a SKIPPED+=1
goto :EOF
)
set "DEST=!DIR!!NEWNAME!!EXT!"
if /I not "%FULL%"=="%DEST%" if exist "%DEST%" (
echo [冲突] "%DEST%"
echo [冲突] "%DEST%" >> "%LOGFILE%"
set /a CONFLICT+=1
goto :EOF
)
ren "%FULL%" "!NEWNAME!!EXT!" >nul 2>&1
if errorlevel 1 (
echo [错误] 改名失败: "%FULL%"
echo [错误] 改名失败: "%FULL%" >> "%LOGFILE%"
) else (
echo [修改] "%FULL%"
echo → "%DEST%"
echo [修改] "%FULL%" >> "%LOGFILE%"
echo → "%DEST%" >> "%LOGFILE%"
set /a CHANGED+=1
)
goto :EOF
:END
endlocal
使用说明
下图是根目录下的测试文件,包含一个子文件夹,里面的文件也一样
1.将上述代码另存为.bat文件,文件名为:Rename.bat
2.放到要处理的同级根目录;
3.双击运行 → 输入 旧字符串(必填);新字符串(可留空表示删除旧串),演示把 V2改成V1。
确认后按回车,程序会直接执行递归重命名。
完成后输出统计信息,详细日志写入:RenameLog.txt(在当前根目录)。
文件重命名后的效果
注意项
1.大小写敏感:CMD 字符串替换区分大小写;
2.冲突保护:如目标文件名已存在则跳过;
3.扩展名保留:仅修改文件名部分;
4.脚本会把子文件夹的文件也修改,如果不需要修改子文件夹,请自行做好隔离








