[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理怎样按文件数字大小的顺序重命名文件

本帖最后由 西京宁音 于 2021-3-17 01:11 编辑

有3000张图片,文件名字是(1)~(3000)用下面的代码会先重命名1开头的文件,1开头的都重命名结束了才会重命名2开头的文件,然后是3开头的.....
  1. @Echo Off&SetLocal ENABLEDELAYEDEXPANSION
  2. set n=1000
  3. rem 变量n的值就是开始序号
  4. set mydir=E:\图片\1
  5. rem 把mydir后面的路径改为需要修改文件名的文件夹的完整路径
  6. for /f "tokens=4 delims=\" %%a in ("%~0") do set self=%%a
  7. cd /d %mydir%
  8. for /f %%i in ('dir %mydir% /b') do (
  9. for /f "tokens=2 delims=." %%a in ("%%i") do (
  10. echo %%i
  11. if not !self! == %%i (
  12. if !n! lss 10 (ren %%i 000!n!.%%a) else (
  13. if !n! lss 100 (ren %%i 00!n!.%%a) else (
  14. if !n! lss 1000 (ren %%i 0!n!.%%a) else ren %%i !n!.%%a
  15. set /a n += 1
  16. )))))
  17. pause
复制代码

要说清楚你的需求。
1.jpg-----0001.jpg
2.jpg-----0002.jpg
.....
200.jpg-----0200.jpg
是这样吗

TOP

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set "mydir=E:\图片\1"
  4. pushd "%mydir%"
  5. for /l %%n in (1,1,3000)do (
  6. set/a newname=10000+%%n
  7. ren %%n.jpg !newname:~-4!.jpg
  8. echo ren %%n.jpg !newname:~-4!.jpg
  9. )
  10. popd
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 3# cutebe
算是吹毛求疵,计数最终值不需要到3000吧,999足矣

TOP

回复 2# qixiaobin0715

(1).jpg-----1000.jpg
(2).jpg-----1001.jpg
(1000).jpg-----1999.jpg
(6666).jpg-----7665.jpg
......
我贴的这个代码是能设置改名开始的序号的
set n=1000
rem 变量n的值就是开始序号

TOP

回复 3# cutebe


    大佬的这个不能识别(1)这种名字的...
我是想让他从1000开始重命名...

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.jpg) do (
  4.     set "str=%%~na"
  5.     set "str=!str:~1,-1!"
  6.     set /a str+=999
  7.     ren "%%a" "!str!.jpg"
  8. )
  9. pause
复制代码
回复 5# 西京宁音

TOP

批处理放在jpg图片所在的文件夹中

TOP

回复 7# qixiaobin0715


    这个代码你自己测试的时候能成功吗?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# Batcher
ren命令好讨厌,错了都不知是错在哪里,就copy吧。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. md newfolder
  4. for %%a in (*.jpg) do (
  5.     set "str=%%~na"
  6.     set "str=!str:~1,-1!"
  7.     set /a str+=999
  8.     copy "%%a" "newfolder\!str!.jpg"
  9. )
  10. pause
复制代码
1

评分人数

TOP

本帖最后由 went 于 2021-3-16 17:38 编辑

参考此贴http://www.bathome.net/viewthread.php?tid=55367&highlight=%C5%C5%D0%F2
做个小改动就行,显示没问题就把16行的REM删掉
  1. @echo off & cd /d "%~dp0"
  2. REM 图片文件夹
  3. set "dir=%~dp0"
  4. REM 图片后缀
  5. set "ext=.jpg"
  6. set "str=0000000000"
  7. REM 开始序号
  8. set "startIndex=1000"
  9. REM 排序代码
  10. set "code=(for /r "%dir%" %%i in ("*%ext%"^) do @(set "n=%%~ni" ^& call set "n=%str%%%n:~1,-1%%" ^& call echo %%n:~-10%%?%%i ^)^) ^| sort"
  11. REM 顺序更名
  12. for /f "tokens=1* delims=?" %%i in ('%code%') do (
  13. echo %%j
  14. call set "n=%str%%%startIndex%%"
  15. call echo %%n:~-4%%.jpg
  16. REM call rename "%%j" "%%n:~-4%%.jpg"
  17. set /a "startIndex+=1"
  18. echo -------------------------
  19. )
  20. pause&exit
复制代码
1

评分人数

TOP

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. ::命名起始序号
  4. set n=1000
  5. ::图片所在目录
  6. set "mydir=E:\图片\1"
  7. pushd "%mydir%"
  8. for /l %%i in (1,1,3000)do (
  9. set/a num=n+%%i-1
  10. ren "(%%i).jpg" !num!.jpg
  11. echo ren "(%%i).jpg" !num!.jpg
  12. )
  13. popd
复制代码
1

评分人数

如无特别说明,代码测试环境均为 XP SP3

TOP

回复 10# qixiaobin0715


for命令重复处理文件的问题可以参考:for命令教程第8页
http://bbs.bathome.net/thread-31727-1-1.html

解决方法之一是把 for 换成 for /f + dir
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 西京宁音 于 2021-3-17 01:39 编辑

回复 11# went


    感谢大佬,成功了!

TOP

回复 12# cutebe


    感谢大佬!大佬的用时是最短的

TOP

返回列表