可以说我有多个文件

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文件并为它们提供唯一的序列号作为输出的%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 ...(字母顺序,不是数字1)。如果可能超过99个文件,只需在set suffix=100命令中添加另一个零以生成三位数的后缀。

还要注意,根据将重命名文件放置在原始文件列表中的站点,您的纯for命令可能会处理某些文件两次或更多次。为避免此问题,请在for /F上使用dir /B *.txt命令。此方法首先获取所有文件的列表,然后在这样的静态列表上执行重命名。

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

09-05 23:19
查看更多