我有大约1000张图片,它们的名称类似于“IMG-12223”。我想将它们重命名为1、2、3、4……1000。我已经编写了一个批处理脚本来列出文件,但我不知道如何对每个文件进行重命名。例如,将名称为“IMG-12223”的第一张图片重命名为1,将名称为“IMG-23441”的第二张图片重命名为2,以此类推...
for /r %%i in (*) do (
echo %c%
)
我有大约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://dev59.com/u2w15IYBdhLWcg3wVaMa#18464353。
for /f "delims=" %%i in ('dir /b *.jpg')
这里使用带有/b
选项的dir
列出所有jpg文件的文件名。
for
循环遍历并重命名所有jpg文件。
对于delims
选项,由于默认的分隔符是空格,在文件名中包含空格的图片文件中,如果不使用delims=
选项,则会失败。例如,如果有一个名为“img with spaces.jpg”的图像文件,没有使用该选项,则%%i
的值为“img”,而不是整个名称“img with spaces.jpg”,这是不正确的。
有关for
循环的详细信息,请参见页面http://ss64.com/nt/for_f.html。
if not "%%~ni"=="%~n0"
我已将其更改为if not "%%~nxi"=="%~nx0"
,以使其更准确。同时,附带的代码也已更新。
实际上,它用于避免重命名批处理文件本身。如果我们仅限制重命名“jpg”文件,则不需要这行代码。
%%~nxi
是每个遍历的文件的带有扩展名的文件名。而%~nx0
是正在运行的批处理文件的名称和扩展名。有关详细信息,请参见页面DOS BAT file equivalent to Unix basename command?。
无需批处理脚本。从命令行输入一个简单的一行命令即可完成任务 :-)
我使用 DIR /B 生成文件列表,通过管道符传递给 FINDSTR 对文件进行编号,然后将其全部包含在 FOR /F 中以解析结果并执行重命名操作。
for /f "delims=: tokens=1*" %A in ('dir /b *.jpg^|findstr /n "^"') do @ren "%B" "%A%~xB"
keyvalue.bat
@echo off
set idx=0
for /F "tokens=1,2" %%A in (keyvalue.txt) do call :PROCESS "%%A" "%%B"
GOTO :END
:PROCESS
set var1=%~1
set var2=%~2
set /A idx=%idx%+1
echo %var1% goes to %var2% (%idx%)
GOTO :EOF
:END
pause
keyvalue.txt
file888.dat newfile1.dat
file333.dat newfile2.dat
file9.dat newfile3.dat
file01.dat newfile4.dat