命令提示符/批处理 - 使用顺序编号重命名多个文件
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 以了解代码的工作原理。
【讨论】:
以上是关于命令提示符/批处理 - 使用顺序编号重命名多个文件的主要内容,如果未能解决你的问题,请参考以下文章