Board logo

标题: [文件操作] [已解决]批处理怎样按文件数字大小的顺序重命名文件 [打印本页]

作者: 西京宁音    时间: 2021-3-16 01:38     标题: [已解决]批处理怎样按文件数字大小的顺序重命名文件

本帖最后由 西京宁音 于 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
复制代码

作者: qixiaobin0715    时间: 2021-3-16 06:43

要说清楚你的需求。
1.jpg-----0001.jpg
2.jpg-----0002.jpg
.....
200.jpg-----0200.jpg
是这样吗
作者: cutebe    时间: 2021-3-16 10:49

  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
复制代码

作者: qixiaobin0715    时间: 2021-3-16 13:50

回复 3# cutebe
算是吹毛求疵,计数最终值不需要到3000吧,999足矣
作者: 西京宁音    时间: 2021-3-16 15:35

回复 2# qixiaobin0715

(1).jpg-----1000.jpg
(2).jpg-----1001.jpg
(1000).jpg-----1999.jpg
(6666).jpg-----7665.jpg
......
我贴的这个代码是能设置改名开始的序号的
set n=1000
rem 变量n的值就是开始序号
作者: 西京宁音    时间: 2021-3-16 15:37

回复 3# cutebe


    大佬的这个不能识别(1)这种名字的...
我是想让他从1000开始重命名...
作者: qixiaobin0715    时间: 2021-3-16 16:00

  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# 西京宁音
作者: qixiaobin0715    时间: 2021-3-16 16:04

批处理放在jpg图片所在的文件夹中
作者: Batcher    时间: 2021-3-16 16:18

回复 7# qixiaobin0715


    这个代码你自己测试的时候能成功吗?
作者: qixiaobin0715    时间: 2021-3-16 16:55

回复 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
复制代码

作者: went    时间: 2021-3-16 17:28

本帖最后由 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
复制代码

作者: cutebe    时间: 2021-3-16 20:11

  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
复制代码

作者: Batcher    时间: 2021-3-16 22:18

回复 10# qixiaobin0715


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

解决方法之一是把 for 换成 for /f + dir
作者: 西京宁音    时间: 2021-3-17 01:00

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

回复 11# went


    感谢大佬,成功了!
作者: 西京宁音    时间: 2021-3-17 01:40

回复 12# cutebe


    感谢大佬!大佬的用时是最短的
作者: 西京宁音    时间: 2021-3-17 01:40

回复 10# qixiaobin0715


    感谢大佬!很好用!
作者: qixiaobin0715    时间: 2021-3-17 05:36

回复 13# Batcher
谢谢!!!
把7楼代码修改一下应当也能解决:
in (*.jpg)-------in (^(*^).jpg)




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2