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

标签 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 提示拾取文件的默认顺序)。

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

最佳答案

@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/

相关文章:

java:简单类型转换

batch-file - “ls”不被识别为内部或外部命令、可操作程序或批处理文件

macos - 如何使用终端批量重命名文件?

regex - 在带有 mv 的 bash 中使用正则表达式

python - 如何重命名具有相同字符串的文件并添加后缀

C++ - 对 Windows 命令使用 system()

python - 使用python自动从windows文件对话框打开文件

shell - 批处理文件在 mvn 命令后停止执行

windows - 将 Findstr 与特定范围或其他方法一起使用

c# - 我可以在 Windows 应用程序而不是网页中包含 reCAPTCHA 吗?