2014-08-30 37 views
7

我有大约1000个图像,它们的名称类似于“IMG-12223”。我想将它们重命名为1 2 3 4 ... 1000.我该怎么做。我写了一个列出文件的批处理脚本,但我不知道如何重命名每个文件。例如重命名的第一图像名称为“IMG-12223”为1,名称为“IMG-23441”到2,依此类推第二图像...使用批处理脚本重命名目录中的多个文件

for /r %%i in (*) do (
    echo %c% 
) 
+0

只是一个提示:免费多媒体查看器[IrfanView](http://www.irfanview.com/)已内置[批量重命名](http://graphicssoft.about.com/cs/renamers/ht /irfanviewrename.htm)功能可以用计数器重命名图像。此外,共享软件文件管理器[Total Commander](http://www.ghisler.com/)具有[多重命名](http://www.ghisler.com/advanced.htm#tutorial_rename)功能,具有更多选项和非常容易使用。在我看来,对于这样的文件重命名任务不使用批处理文件作为计划任务自动执行是没有意义的。 – Mofi 2014-08-30 21:41:31

回答

12

这里的脚本。只需将脚本放入您的文件夹并运行即可。

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

[更新]我这里还有在杰克的评论中提到的行解释。

  • 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=,因此文件名中包含空格的图像文件会失败。 I.E.对于名为“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"更准确。所附代码已更新。

它实际上用于避免重命名bat文件本身。如果我们只在“jpg”文件中限制重命名,则不需要该行。

%%~nxi是每个遍历的文件的扩展名。 %~nx0是带有扩展名的运行bat文件。详情请参阅DOS BAT file equivalent to Unix basename command?

+0

感谢您的回复,如果不是“%%〜ni”,请您解释以下几行“setlocal EnableDelayedExpansion”,“for/f”delims =“%% i in('dir/b * .jpg')” ==“%〜n0” – 2014-08-30 16:46:14

+0

当然,我刚刚对脚本进行了改进,并在您提到的行中添加了解释。实际上,您也可以稍微更改脚本以将图像的目录作为参数。 – Landys 2014-08-31 04:34:10

0

试试这个,你在文本文件中有一对名称值,然后循环值并做魔法。 Namevalues由空格分隔。这允许您相应地映射旧的 - >新的文件名。或者你保留idx + 1计数器并将其用于新文件名。

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 
7

没有必要为一个批处理脚本。从命令行简单的一个班轮可以完成这项工作:-)

我使用DIR/B生成的文件列表,管道到FINDSTR编号的文件,所有附有n FOR/F解析结果和执行重命名。

for /f "delims=: tokens=1*" %A in ('dir /b *.jpg^|findstr /n "^"') do @ren "%B" "%A%~xB" 

如果要将命令放入批处理脚本中,请将双倍百分比。

相关问题