命令提示符/批处理 - 使用顺序编号重命名多个文件

Posted

技术标签:

【中文标题】命令提示符/批处理 - 使用顺序编号重命名多个文件【英文标题】:Command Prompt/Batch - rename multiple files with sequential numbering 【发布时间】:2017-08-09 08:42:51 【问题描述】:

假设我有多个文件

filename.a.txt
filename.b.txt
filename.c.txt

我想运行一个以所有 .txt 文件为目标的批处理文件,并将它们重命名为我在自定义 %filename% var 中设置的任何内容 + 给它们编号,这样它最终会变成这样:

filename.1.txt
filename.2.txt
filename.3.txt

到目前为止,我已经写了这个:

set filename=FileTitle
for /r %%i in (*.txt) do call ren %%i %filename%.txt

它可以工作,但问题是它只是拾取第一个 .txt 文件并为其提供 FileTitle 文件名,仅此而已。我不知道如何批量重命名所有 .txt 文件并将它们作为前缀/后缀/自定义 var 提供给输出的 %filename%.txt 的唯一序列号,例如%filename%-%uniquesuffix%.txt。所以我需要设置某种变量,给每个文件一个唯一的数字,例如从 1-99 按字母顺序排列(cmd 提示符拾取文件的默认顺序)。

我确实搜索了其他答案,但它们只显示了如何将全局/相同前缀添加到重命名的文件中。

【问题讨论】:

嗯,我很确定我们有一个关于 SO 的例子。如果您需要一个序列号,请设置一个变量,使其在每次使用SET /A 命令重命名文件时递增。没有理由使用CALL 命令。 【参考方案1】:
@echo off
setlocal EnableDelayedExpansion

set filename=FileTitle
set suffix=100
for /F "delims=" %%i in ('dir /B *.txt') do (
   set /A suffix+=1
   ren "%%i" "%filename%-!suffix:~1!.txt"
)

此代码以您请求的形式重命名文件。请注意,数字后缀有两位数,以保留文件的原始字母顺序。如果使用了“自然”的 1-99 数字,则 cmd 提示符中显示文件的顺序会以这种方式更改:1.txt 10.txt 11.txt ... 19.txt 2.txt 20.txt 21.txt ... 29.txt 3.txt ...字母顺序,不是数字)。如果可能超过 99 个文件,只需在 set suffix=100 命令中添加一个零即可生成三位数字后缀。

另请注意,您的普通for 命令可能会处理某些文件两次或多次,具体取决于重命名文件将放置在原始文件列表中的位置。为了避免这个问题,使用for /F 命令而不是dir /B *.txt 命令。此方法首先获取所有文件的列表,然后然后在这样的静态列表上执行重命名。

要处理当前文件夹下的所有文件(这是for 命令中的/r 开关的目的),只需在dir 命令中添加/S 开关。

【讨论】:

您好,谢谢您的回复,也许您知道我如何重命名为 01、02、03、04、05、06、07、08、09、10、11 而不是 1、2、3, 4、5、6、7、8、9、10?【参考方案2】:

您可以使用以下代码来完成这项工作。

@echo off
pushd %~dp0
setlocal EnableDelayedExpansion

set filename=FileTitle
set Num=1
for /r %%i in (*.txt) do (
    ren "%%i" "%filename%.!Num!.txt"
    set /a Num+=1
)

您可以查看https://ss64.com/nt/delayedexpansion.html 以了解代码的工作原理。

【讨论】:

以上是关于命令提示符/批处理 - 使用顺序编号重命名多个文件的主要内容,如果未能解决你的问题,请参考以下文章

bat批处理文件夹下所有子文件夹下最后一个的文件重命名?

怎么批量重命名多个文件夹里的图片

重命名文件夹时拒绝访问

如何使用环境变量复制和重命名文件?

win下用命令行 ren 重命名时提示 系统找不到文件

在 Windows 批处理中使用创建日期和时间重命名文件