NO.107 AI生成的批量修改.hwbk文件名代码学习
已经很多年不写代码了,这两年只是听说AI辅助生成码,但也实际手操作过。所以当实际看到AI生成批处理直接可用时,还是感慨了一下:曾经自己学习+写出这样代码,加上不断调试,至少要好几天。现在半分钟出来,没有任何Bug。过年期间,整理一台老的笔记本电脑,结果发现有很多曾经备份手机照片,其中有大量的.hwbk文件,猜是HuaWeiBackup的意思,再看名称是.IMG_日期_序号.jpg,这肯定华为手机自
引言:
已经很多年不写代码了,这两年只是听说AI辅助生成码,但也没实际上手操作过。所以当实际看到AI生成批处理直接可用时,还是感慨了一下:曾经要自己先学习,再写出这样代码,再进行不断调试,弄一个实际能用的东西出来,搞不好要好几天。现在半分钟就出来了,还没有任何Bug,程序员市场需求减量确实是个大趋势。
一、背景
过年期间,整理一台老的笔记本电脑,结果发现有很多曾经备份的手机照片,其中有大量的.hwbk文件,猜是HuaWeiBackup的意思,再看文件名格式一般是“.IMG_日期_序号.jpg”,这肯定是华为手机自己备份的照片了。自己去掉了一个文件的.hwbk后缀,变成jpg文件,打开发现这照片没啥印象。照片即回忆,不可丢弃,所以就想全部恢复一下,再存入一刻相册。
二、过程
实际操作,可以分成两个阶段。
1、批量去掉文件名的.hwbk后缀
这个好办,打开cmd,cd到想批量改名的目录,然后输入:
ren *.hwbk *.jpg
结果发现文件名变成了.XXXX.jpg.jpg。
有重复的后缀?完美症发作,不能忍。第一反应是百度答案,结果就下载了一个工具,安装打开一用,竟然要收费。我自己能搞定的事儿,不接受付费,立即卸载。
替换搜索词,“批量修改文件名中重复的后缀 比如.jpg.jpg”,结果这次百度AI直接提供了批处理代码,写的非常标准:
@echo off
setlocal enabledelayedexpansion
REM 设置目标文件夹路径(请修改为你的实际路径)
set "folder=C:\Your\Target\Folder"
REM 设置要移除的重复后缀(例如 .jpg)
set "suffix=.jpg"
REM 进入目标文件夹
cd /d "%folder%"
REM 遍历所有带有重复后缀的文件
for %%f in (*%suffix%%suffix%) do (
REM 获取文件名(不含扩展名)
set "filename=%%~nf"
REM 去除最后一个后缀,得到新文件名
set "newname=!filename:%suffix%=!"
REM 重命名文件
ren "%%f" "!newname!!suffix!"
)
echo 重命名完成!
pause
直接拷贝进一个空白txt文件,修改set "folder=C:\Your\Target\Folder"中的目录为自己实际的目录,然后保存,修改“.txt”后缀为“.cmd”运行。
嗯,世界清静了。
2、批量去掉文件名中的第一个字符
再往下,导入一刻相册的时候又出问题了,一刻相册竟然没有识别这些.jpg文件,仔细观察,觉得是文件名第一个字符是“.”惹的祸。
继续搜索答案:“批量去掉文件名中开头的.”,结果这次百度AI给三个方案里没有bat方案,其中倒是有个python代码,我这老电脑,也没有pyth环境啊,另外我的python水平,还很一般啊。
然后灵机一动,不就想去掉第一个字符嘛,不用限定是“.”。再来。
搜索条件换成“批量去掉文件名中开头的第一个字符”,这次百度AI终于给出了bat版本的答案:
@echo off
setlocal enabledelayedexpansion
set "folder_path=C:\Your\Target\Folder"
cd /d "%folder_path%"
for %%f in (*) do (
set "filename=%%~nf"
set "extension=%%~xf"
set "new_filename=!filename:~1!!extension!"
if not "!filename!"=="!new_filename!" ren "%%f" "!new_filename!"
)
echo 文件名修改完成!
pause
还是老样子,做成bat文件执行。
结果是美好,所有调整名称后的jpg文件都成功导入了一刻相册。
就在写这篇帖子的时候,我重新查找了一次“批量去掉文件名中开头的.”,结果百度AI这次又出了bat答案,如下:
@echo off
setlocal enabledelayedexpansion
for %%f in (*) do (
set "filename=%%~nf"
set "extension=%%~xf"
if "!filename:~0,1!"=="." (
ren "%%f" "!filename:~1!!extension!"
)
)
echo 批量处理完成!
pause
注意,这次让直接在目标文件夹里执行,缺了自行设置目标目录那几行代码。
三、代码中涉及的有关指令学习
最后,知其然,知其所以然。
我们还是结合这些命令,学习下bat的一些基本命令。
三段代码内容较为类似,合并在一起学习。
@echo off 关闭命令回显。
批处理脚本执行时默认显示每一条命令本身的。@echo off之后,就只显示命令的输出结果,从而让界面更简洁。
setlocal enabledelayedexpansion 启用延迟变量扩展
批处理有两种变量,%%圈起来是一般的变量引用方式。
在for循环中,则需要使用!!括起来的的,表示每一次循环都要用最新的赋值。
set "folder_path=C:\Your\Target\Folder"
set "suffix=.jpg" 给变量赋值
如果没有空格等特殊字符,不加引号也可以,一般都应加引号
cd /d "%folder_path%"
进入上面指定的目录内,/d 表示同时切换盘符
for %%f in (*) do (
遍历当前目录内所有文件,并使用%%f变量引用这个文件,如果递归可以使用 /r,比如:
for /r %%f in (*)
for %%f in (*%suffix%%suffix%) do (
遍历符合所有有两个%suffix%后缀的文件
set "filename=%%~nf"
~n,表示获取该文件的文件名
set "extension=%%~xf"
~x,表示获取该文件的后缀(扩展名)
通过以上两行代码,实际运行后filename为“.XXXX.jpg”,extension为“.jpg”
set "new_filename=!filename:~1!!extension!"
:~1表示截取":"前变量字符串第1个字符以后的部分,这行代码就实现了以去掉第一个字符的文件名+后缀为新文件名
set "newname=!filename:%suffix%=!"
:a=b表示将":"前变量字符串中的a替换为b,这行代码实现了去掉文件名中那个多余的后缀名
if "!filename:~0,1!"=="." (
一个只对文件名第一个字符为"."的判断
if not "!filename!"=="!new_filename!" ren "%%f" "!new_filename!"
这个if not判断,避免了新文件名没变化的情况,这样性能会更好吗?
echo 文件名修改完成!
pause
如果是直接运行批处理命令,cmd窗口如果没有这个pause,窗口会直接关闭,不利于查看运行结果是否有异常
更多推荐



所有评论(0)