命令 Prompt/Batch - 使用顺序编号重命名多个文件
Command Prompt/Batch - rename multiple files with sequential numbering
假设我有多个文件
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 文件,并将它们作为 prefix/suffix/custom var 的唯一序列号提供给输出的 %filename%.txt
,例如%filename%-%uniquesuffix%.txt
。所以我需要设置某种变量,为每个文件提供一个唯一的编号,例如从 1-99 按字母顺序排列(cmd 提示拾取文件的默认顺序)。
我确实搜索了其他答案,但它们只显示了如何向重命名的文件添加 global/same 前缀。
您可以使用以下代码来完成这项工作。
@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 以了解代码的工作原理。
@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"
)
此代码以您请求的形式重命名文件。请注意,数字后缀有 两位数字,以便保留文件的原始字母顺序。如果使用 "natural" 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
开关命令。
假设我有多个文件
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 文件,并将它们作为 prefix/suffix/custom var 的唯一序列号提供给输出的 %filename%.txt
,例如%filename%-%uniquesuffix%.txt
。所以我需要设置某种变量,为每个文件提供一个唯一的编号,例如从 1-99 按字母顺序排列(cmd 提示拾取文件的默认顺序)。
我确实搜索了其他答案,但它们只显示了如何向重命名的文件添加 global/same 前缀。
您可以使用以下代码来完成这项工作。
@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 以了解代码的工作原理。
@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"
)
此代码以您请求的形式重命名文件。请注意,数字后缀有 两位数字,以便保留文件的原始字母顺序。如果使用 "natural" 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
开关命令。