假设我有多个文件
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 提示拾取文件的默认顺序)。
我确实搜索了其他答案,但它们只显示了如何为重命名的文件添加全局/相同的前缀。
最佳答案
@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
命令可能会处理某些文件两次或更多次,具体取决于重命名文件将放置在原始文件列表中的站点。要避免此问题,请在 dir/B *.txt
上使用 for/F
命令。此方法首先获取所有文件的列表,然后然后对此类静态列表执行重命名。
要处理当前文件夹下的所有文件(这是在 for
命令中使用 /r
开关的目的),只需添加一个 /S
切换到 dir
命令。
关于windows - 命令提示符/批处理 - 使用顺序编号重命名多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42863483/