Mac/Windows下将序列JPG文件从指定编号起始重命名的方法
文件批量重命名解决方案(OSX + Windows)
OSX(Bash 命令)
方案一:修正循环逻辑并保证文件顺序
你之前的脚本问题出在文件遍历顺序不是数字升序——OSX中for f in *会按字符串排序,导致10.jpg排在2.jpg前面,最终编号混乱。以下是修正后的脚本:
# 设置起始编号为83 start=83 # 用ls -v按数字升序遍历jpg文件,避免排序错乱 for f in $(ls -v *.jpg); do if [[ -f "$f" ]]; then mv "$f" "${start}.jpg" ((start++)) fi done
方案二:修改Stack论坛脚本的起始编号
针对你看到的cat -n脚本,只需给生成的编号加上偏移量82(原编号从1开始,1+82=83),同时保证文件排序正确:
ls -v *.jpg | cat -n | while read n f; do new_num=$((n + 82)) mv "$f" "${new_num}.jpg" done
Windows 批处理脚本
在CMD中执行以下脚本,可按数字顺序完成重命名:
@echo off setlocal enabledelayedexpansion set "start=83" :: 从1到100循环遍历目标文件 for /l %%i in (1,1,100) do ( if exist "%%i.jpg" ( ren "%%i.jpg" "!start!.jpg" set /a start+=1 ) ) endlocal
问题原因说明
- 你最初的脚本里,
for f in *的遍历顺序是字符串排序,导致文件顺序错乱,即使设置起始值为83也会出现编号错位; - Stack论坛的默认脚本用
cat -n生成1开始的编号,只需添加偏移量就能调整起始值,但必须配合ls -v保证文件按数字顺序排列。
内容的提问来源于stack exchange,提问作者transit hut
相关产品推荐
相关产品推荐

