使用批处理脚本重命名目录中的多个文件

时间:2014-08-30 14:00:54

标签: file batch-file rename

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

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

3 个答案:

答案 0 :(得分: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”,“I​​MG-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?

答案 1 :(得分:7)

不需要批处理脚本。命令行中的一个简单的衬管可以完成这项工作: - )

我使用DIR / B生成文件列表,通过管道传输到FINDSTR以对文件进行编号,所有文件都包含在FOR / F中以解析结果并执行重命名。

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

如果要将命令放在批处理脚本中,则加倍百分比。

答案 2 :(得分:0)

试试这个,你在文本文件中有一对名称值然后循环值并做魔术。名称值由空格分隔。这允许您相应地映射旧的>新文件名。或者你保留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