批量删除文件的最后4个字符,如果它们不以.jpg结尾?

时间:2013-02-19 20:59:46

标签: windows batch-file directory rename

由于After Effects中的一个错误,我得到的单帧输出结尾有4个数字,如下所示:

Test.jpg0001
Another.jpg0345
AndAnother.jpg0033

如果文件没有以.jpg结尾,是否有可以编写的批处理脚本在Windows文件夹中运行以删除最后4个字符?因此,当我添加新文件时,我可以继续运行脚本,但它不会影响已经更正的文件。

2 个答案:

答案 0 :(得分:1)

这是一个VB脚本,它将搜索以JPG开头的所有扩展名,如果长度超过3个字符,则会将文件重命名为仅以jpg结尾。像我一样只用几个文件创建一个测试目录并试一试。它在代码中有一个硬编码的目录,在运行它之前你必须更改它(除非你的目录名为c:\ testdat)。注意用斜杠(懒惰编程)结束文件夹名称:

   set fs = createobject("Scripting.Filesystemobject")

   dirWithFiles = "C:\TestDat\"   ' End with a slash

   set folder = fs.getfolder(dirWithFiles)

   set filescollection = folder.files
   for each file in filescollection
      oldname = dirWithFiles & file.name
      basename = fs.getbasename(file.name)
      extension = fs.getExtensionName(file.name)


      if ucase(mid(extension,1,3)) = "JPG" then
         if len(extension) > 3 then
            newname = dirWithFiles & basename & ".jpg"

            'msgbox "Rename " & oldname  & " to " & newname
            fs.movefile oldname,newname
         end if
      end if
   next

将其复制到以.vbs结尾的文件中(我称之为我的jpgrename.vbs),修改c:\ testdat \目录名称,然后将其放在桌面上。双击它(在Windows下),它应该运行。这是图像之前和之后:

enter image description here

答案 1 :(得分:1)

我的天哪,不需要任何形式的剧本。您只需要一个简单的重命名命令。

对于包含.jpg的任何文件名,这会将扩展名设置为.jpg

ren *.jpg* *.jpg

上述内容并不完美,因为它会不正确地将test.jpg.txt重命名为test.jpg.jpg。它还会将test2.jpgXYZ之类的文件(.jpg之后的数字除外)重命名为test2.jpg。我怀疑这些限制不会成为问题。

如果您想要更具选择性并且只重命名扩展名以.jpg开头的文件(忽略名称中带有.jpg的文件,后跟其他扩展名),那么您可以定期使用FINDSTR用于过滤文件的表达式:

for /f "eol=: delims=" %F in ('dir /b *.jpg*^|findstr /re "\.jpg[^.][^.]*"') do ren "%F" *.jpg

如果您想要更具选择性,只重命名以.jpg后跟1位或更多位数的文件,则:

for /f "eol=: delims=" %F in ('dir /b *.jpg*^|findstr /re "\.jpg[0-9][0-9]*"') do ren "%F" *.jpg

如果在批处理文件中使用FOR / F语句,则需要将百分比加倍,(%%F而不是%F)。