You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Bat脚本按数字顺序重命名文件夹内文件?

按数字顺序重命名文件夹内文件的Bat脚本修复方案

原脚本依赖dir /b /on *.jpg的排序逻辑,该参数采用字典序排序,会导致数字顺序混乱(如1,10,11,...,2,3...),无法实现预期的数字升序排列。以下是两种修复方案:

方案一:纯Bat命令实现数值排序

@echo off
setlocal enabledelayedexpansion

set "pasta=E:\Google Drive\_Projetos em andamento\Ano 2023\Album\Testando"
set "contador=1"

cd /d "%pasta%"

:: 提取文件名数字并按数值排序后重命名
for /f "tokens=*" %%F in ('dir /b *.jpg ^| cmd /v:on /c "for /f %%N in (@^) do echo %%~nF" ^| sort /n') do (
    :: 生成带补零的文件名,截取最后三位保证位数统一
    set "novo_nome=00!contador!"
    ren "%%F.jpg" "!novo_nome:~-3!.jpg"
    set /a "contador+=1"
)

endlocal

关键修改说明:

  • 替换原dir /on的字典序排序,改用sort /n执行数值排序,确保文件按数字大小升序排列。
  • 通过!novo_nome:~-3!截取补零后的最后三位,适配不同位数的计数器(如1→001、10→010、100→100)。

方案二:借助PowerShell实现更稳定的排序

如果文件名结构复杂,纯Bat逻辑可能存在局限性,可借助PowerShell的强类型排序:

@echo off
setlocal enabledelayedexpansion

set "pasta=E:\Google Drive\_Projetos em andamento\Ano 2023\Album\Testando"
set "contador=1"

cd /d "%pasta%"

:: 调用PowerShell按文件名数字值排序
for /f "tokens=*" %%F in ('powershell -Command "Get-ChildItem *.jpg | Sort-Object {[int]$_.BaseName} | Select-Object -ExpandProperty Name"') do (
    set "novo_nome=00!contador!"
    ren "%%F" "!novo_nome:~-3!.jpg"
    set /a "contador+=1"
)

endlocal

优势:

  • Sort-Object {[int]$_.BaseName}将文件名(不含后缀)强制转换为整数后排序,彻底避免字典序的干扰,适配各种数字位数的文件名。

内容的提问来源于stack exchange,提问作者Angeni Fortal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:45:09