【问题标题】:Batch rename files how to loop in order of filename?批量重命名文件如何按文件名顺序循环?
【发布时间】:2014-01-31 21:27:33
【问题描述】:

我有一堆名为 IMG_0001、IMG_0002 等的 jpg 文件。问题是我必须删除其中的几个,所以我需要重命名文件以填补空白。本质上,

IMG_0001、IMG_0002、IMG_0004、IMG_0006

改名了

IMG_0001、IMG_0002、IMG_0003、IMG_0004。

从而填补了我删除的文件造成的空白。但是,我为此编写的 bat 文件有时会将文件杂乱无章,因此最初的 IMG_0001 将变为 IMG_0002,而 IMG_0003 将变为 IMG_0001。如何确保我的 bat 文件按名称顺序循环遍历文件?

这是我的 bat 文件:

@echo off
set i=1
set y=0000
for %%f in (*.jpg) do call :renameit "%%f"
goto done

:renameit
set x=%y%%i%
ren %1 IMG_%x:~-4%.jpg
set /A i+=1

:done

【问题讨论】:

    标签: windows batch-file for-loop file-rename


    【解决方案1】:

    我认为 FOR 本身不支持排序,但 DIR 支持 /on(“按名称排序”)开关。所以,试着用这个替换你的 FOR 循环:

    for /f "tokens=*" %%f in ('dir /b /on *.jpg') do call :renameit "%%f"
    

    【讨论】:

      【解决方案2】:
      @echo off
      setlocal enableextensions enabledelayedexpansion
      
      for /f "tokens=1,* delims=:" %%a in ('dir /a-d /on /b "IMG_*.jpg"^|findstr /n "^"') do (
          set /a "n=%%a+10000"
          ren "%%b" "IMG_!n:~-4!.jpg"
      )
      

      这只是使用 findstr 来计算检索到的文件列表(每行的格式为 number:filename),并使用这个计算来重命名文件。

      【讨论】:

        猜你喜欢
        • 2014-04-22
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-10
        • 2023-04-03
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多