温馨提示:使用前建议先进行测试和原文件备份,避免引起不必要的损失。
(一)需求描述
前不久有个粉丝联系我,说我之前出的关于一键添加文件命名前后缀的博文无法满足他多变的需求,他说希望出一篇一键替换文件完整名称字段的博文。没办法,本来我都不想写了,谁叫我宠粉呢。
解释一下“一键替换完整名称字段(文件)”,这次的功能是替换,而不是添加,完整名称包括文件名称和文件扩展名,所以我们要实现的需求如下:
①能够一键替换含有指定公有字段的文件的名称。
②能够一键替换含有指定公有字段的文件的扩展名。
(二)解决思路
①在当前目录下,我创建了一个.txt文件,用文本编辑器打开并写上了以下代码:
@echo off
:: 开启延迟变量扩展,使得循环中的变量可以动态更新
setlocal enabledelayedexpansion
:: 获取待替换的旧字段和用以替换旧字段的新字段
set /p old_field=input field:
set /p new_field=input replace:
:: 遍历当前目录下的所有文件,然后依次判断和替换字段
for %%i in (*%old_field%*) do (
if not "%%i" == "%~nx0%" (
set "filename=%%i"
set "new_filename=!filename:%old_field%=%new_field%!"
if not "!filename!"=="!new_filename!" (
ren "!filename!" "!new_filename!"
)
)
)
endlocal
echo "Field %old_field% has been replaced with %new_field%!"
pause
②随后Ctrl+S保存一下,关闭文本编辑器,F2重命名将.txt后缀改为.bat;
③双击该Bat文件运行,根据提示输入待替换的旧字段和用以替换旧字段的新字段;
④关闭DOS命令窗口,等待系统刷新或F5手动刷新。
(三)测试
为了避免咱的代码可能出现问题,真正投入使用前当然还是要进行测试的,万一有时候没有备份又不小心把原有的文件名覆盖了,就难搞了。测试情景如图1所示。
![](https://i-blog.csdnimg.cn/blog_migrate/774e4f2f2939d2424c9aaced4bdfed01.png)
一键替换文件扩展名和文件名称的测试结果分别如图2和图3所示。
![](https://i-blog.csdnimg.cn/blog_migrate/70bba220dd9d883d51c2064dd39d636e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/25d45c2ed0ed6265405e5c7657ed2d61.png)
(四)代码解说
“@echo off”关闭bat脚本的命令显示,”setlocal enabledelayedexpansion”用于开启变量延迟扩展,开启后循环中定义的变量才能够动态更新。将用户的输入存储在变量“old_field”和”new_field”中,然后遍历当前目录下的所有文件,若文件新与旧的完整名称不同则进行重命名。
(五)注意事项
①当前版本代码所运行的操作系统为Windows10,其它版本的Windows系统未经测试,为避免造成不必要的损失,建议正式使用前先测试一下;
②当前版本代码只适用于修改其所在层级目录的文件,不迭代子目录,不作用于文件夹;
③与bat脚本同名的文件将不会被有效作用。
(六)其它相关文章推荐
免责声明:由于本文内容未经过正规和严格的测试,可能存在错误,因此造成的损失均由使用者自行承担,对本文内容复制、下载、参考等引用行为即默认悉知并同意该声明。
如果这篇文章对你有帮助,请给作者点个赞吧!