Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)

Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)

问题来源

通常在我们处理一些文件时,文件命名已经较为规则,如有统一的前缀或后缀:
Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)_第1张图片
但其提供的顺序可能并不是我们所希望的顺序,尤其是在其编号正好和我们所需顺序相反的情况下,如果文件数量较小,我们手动更改即可,但如果文件数量较大,此时手动更改编号便较为繁琐,我们可以通过编辑批处理脚本的方式将这些文件重命名。

问题分析

在学习编程时我们知道,通常交换两个变量需要一个中间变量来保存第一个被交换变量的值,以避免数值被覆盖从而丢失信息,因此,直接按顺序对文件进行重命名的方法并不可取,我们需先借助一个缓存文件(文件夹)保存原始文件,然后再拷贝缓存文件重命名并覆盖原始文件。以下是具体代码。

代码

@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。
Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)_第2张图片
接着,我们在文件所在目录新建一个bat脚本,将上述代码进行修改,如下(注意要将扩展名更改为txt):
Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)_第3张图片
修改完后双击运行脚本,如下所示:
Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)_第4张图片
至此,文件已被全部重命名。
Windows使用批处理(.bat)对文件夹内前缀+编号命名文件批量更改编号顺序(或重命名)_第5张图片

你可能感兴趣的:(windows)