Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)
Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)
问题来源
通常在我们处理一些文件时,文件命名已经较为规则,如有统一的前缀或后缀:
但其提供的顺序可能并不是我们所希望的顺序,尤其是在其编号正好和我们所需顺序相反的情况下,如果文件数量较小,我们手动更改即可,但如果文件数量较大,此时手动更改编号便较为繁琐,我们可以通过编辑批处理脚本的方式将这些文件重命名。
问题分析
在学习编程时我们知道,通常交换两个变量需要一个中间变量来保存第一个被交换变量的值,以避免数值被覆盖从而丢失信息,因此,直接按顺序对文件进行重命名的方法并不可取,我们需先借助一个缓存文件(文件夹)保存原始文件,然后再拷贝缓存文件重命名并覆盖原始文件。以下是具体代码。
代码
@echo off
chcp 65001
setlocal enabledelayedexpansion
set folderPath=%cd%
set filesubname=IMG-0001-00
set cachename=_Cache
set cachefloder=%folderPath%%cachename%
mkdir %cachefloder%
set /a counter=0
for %%F in (%folderPath%\*.dcm) do (
set /a counter+=1
)
echo 文件总个数%counter%
xcopy "%folderPath%\*" "%cachefloder%\" /E /I /Y
for %%F in (%cachefloder%\*.dcm) do (
set thisfilename=%%~nF
rem 减去前缀
set filenumber=!thisfilename:*%filesubname%=!
REM 删去数字编号前方的0,避免误读取成八进制
set filenumber=!filenumber:0=!
set /a newnumber=%counter%-!filenumber!+1
REM 对数字编号进行补零处理
if !newnumber! lss 10 (
set paddedNumber=00!newnumber!
) else if "!number!" lss 100 (
set paddedNumber=0!newnumber!
) else (
set paddedNumber=!newnumber!
)
set newfilename=%folderPath%\%filesubname%!paddedNumber!.dcm
copy %%F !newfilename!
echo 将%%F文件复制到!newfilename!
)
rmdir /s /q "%cachefloder%"
echo
echo 重命名完成
pause
代码分析
首先,我们提取必要的变量:当前目录(folderPath)、要创建的缓存文件夹名称(cachefloder)、文件夹内文件数量(counter),并创建缓存文件夹。同时,设置文件夹内文件名的共同前缀(filesubname),以上图示例为例,其共有二百多张图片,因此,发生变化的是文件名的后三位数字,不发生变化的是前缀“IMG-0001-00”。
然后,我们将所有文件复制到缓存文件夹,接着遍历整个缓存文件夹的文件,提取文件名的前缀,获取其数字编号,同时计算新的数字编号,并将其转为字符串类型并进行补零操作,最后,将缓存文件以新的命名覆盖原始文件。
完成所有操作后,删除缓存文件。
运行示例
在此,我们以三个txt文件为例,分别命名为Test-0X.txt,其中,三个文件中分别按原始编号写入数字1,2,3。
接着,我们在文件所在目录新建一个bat脚本,将上述代码进行修改,如下(注意要将扩展名更改为txt):
修改完后双击运行脚本,如下所示:
至此,文件已被全部重命名。
Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)_批处理修改文件名前缀_亦仁.的博客-CSDN博客