批量重命名特定文件,将char添加到filename

时间:2016-07-07 10:06:25

标签: batch-file file-rename batch-rename

我想添加" a"一个文件名中的特定位置,但不是dir中的所有文件。

这些文件都是pdf文件,文件名不同,格式如下:
x.pdf

x_x.pdf

x的范围为1-999。要重命名的文件是" _"之后有2或3个字符的所有文件。新的文件名应该有一个" a"在_
之后 在这个例子中,粗体文件应该有一个" a"在_
之后

0.pdf
0_34.pdf
10.pdf
10_1.pdf
10_10.pdf
10_111.pdf

我试图做IF exist *_??.pdf ren *_a??.pdf (之类的事情 或创建一个循环for %%o in (*_??.pdf) do ren "%%o" "*_a??.pdf"
然后用三个做一个???它看起来不是非常接近,因此我请求你们帮忙! :)

2 个答案:

答案 0 :(得分:0)

ren是一个非常古怪的命令。有人在这里做了一个完整的研究https://superuser.com/questions/475874/how-does-the-windows-rename-command-interpret-wildcards

或者您可以使用批量重命名命令http://www.bulkrenameutility.co.uk/Command.php

答案 1 :(得分:0)

您可以尝试以下代码:

for /F "eol=| tokens=1,* delims=_" %%E in ('
    dir /B /A:-D "?*_??*.pdf" ^| findstr /I /R /C:"^[0-9][0-9]*_[0-9][0-9][0-9]*\.pdf$"
') do (
    ECHO ren "%%E_%%F" "%%E_a%%F"
)

这里我使用for /F而不是标准的for循环,因为在循环迭代时修改了目录内容,这可能会导致麻烦,根据这个:At which point does for or for /R enumerate the directory (tree)?。使用for /F解析dir /B的输出,在重命名任何项目之前,将读取目录内容

此处findstr命令行构成了一个额外的过滤器,因此只有符合命名规则的文件才会受到重命名的影响。如果您不想要,请删除findstr命令和^|

出于测试目的,我将ECHO添加到ren命令,因此要重命名所有文件,将其删除。