我大约有1000张图像,它们的名称类似“IMG-12223”。我想将它们重命名为1 2 3 4 ...1000。我该怎么做。我写了一个批处理脚本,其中列出了文件,但是我不知道如何重命名每个文件。例如将名称为“IMG-12223”的第一张图像重命名为1,名称为“IMG-23441”的第二张图像重命名为2,依此类推...
for /r %%i in (*) do (
echo %c%
)
最佳答案
这是脚本。只需将脚本放入您的文件夹中并运行它即可。
@echo off & setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /b *') do (
if not "%%~nxi"=="%~nx0" (
ren "%%i" "!a!"
set /a a+=1
)
)
如果要保留扩展名,即将“IMG-12223.jpg”,“IMG-12224.jpg”等重命名为“1.jpg”,“2.jpg”等,则可以使用以下脚本。
@echo off & setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /b *.jpg') do (
ren "%%i" "!a!.jpg"
set /a a+=1
)
[更新]这是 jack 评论中提到的内容的解释。
setlocal EnableDelayedExpansion
通常,我们希望变量
a
在执行时被延迟扩展,但不读取行。没有它,变量a
无法获得其增加的值,但始终为1。有关EnableDelayedExpansion的详细信息,请引用答案https://stackoverflow.com/a/18464353/2749114。
for /f "delims=" %%i in ('dir /b *.jpg')
在这里,带有
dir
选项的/b
仅列出所有jpg文件的文件名。for
循环遍历并重命名所有jpg文件。对于
delims
选项,由于默认的定界符是空格,因此如果没有选项delims=
,则文件名中带有空格的图像文件将失败。 IE。对于名为“带有spaces.jpg的img”的图像文件,如果没有该选项,则%%i
的值为“img”,而不是整个名称为“带有spaces.jpg的img”,这是不正确的。有关
for
循环,请参阅页面http://ss64.com/nt/for_f.html。if not "%%~ni"=="%~n0"
为了更准确,我将其更改为
if not "%%~nxi"=="%~nx0"
。并且附件代码已更新。实际上,它用于避免重命名bat文件本身。如果我们仅将重命名限制在“jpg”文件上,则不需要该行。
%%~nxi
是所遍历的每个文件的扩展名。 %~nx0
是正在运行的扩展名为bat的文件。有关详细信息,请参阅页面DOS BAT file equivalent to Unix basename command?。
关于file - 使用批处理脚本重命名目录中的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25583161/