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

时间:2017-03-17 17:13:13

标签: windows batch-file batch-rename

假设我有多个文件

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提示选择文件的默认顺序)。

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

2 个答案:

答案 0 :(得分:2)

@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开关即可。

答案 1 :(得分:0)

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

@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以了解代码的工作原理。