标题: [文件操作] [已解决]批处理怎样按文件数字大小的顺序重命名文件 [打印本页]
作者: 西京宁音 时间: 2021-3-16 01:38 标题: [已解决]批处理怎样按文件数字大小的顺序重命名文件
本帖最后由 西京宁音 于 2021-3-17 01:11 编辑
有3000张图片,文件名字是(1)~(3000)用下面的代码会先重命名1开头的文件,1开头的都重命名结束了才会重命名2开头的文件,然后是3开头的.....- @Echo Off&SetLocal ENABLEDELAYEDEXPANSION
- set n=1000
- rem 变量n的值就是开始序号
- set mydir=E:\图片\1
- rem 把mydir后面的路径改为需要修改文件名的文件夹的完整路径
- for /f "tokens=4 delims=\" %%a in ("%~0") do set self=%%a
- cd /d %mydir%
- for /f %%i in ('dir %mydir% /b') do (
- for /f "tokens=2 delims=." %%a in ("%%i") do (
- echo %%i
- if not !self! == %%i (
- if !n! lss 10 (ren %%i 000!n!.%%a) else (
- if !n! lss 100 (ren %%i 00!n!.%%a) else (
- if !n! lss 1000 (ren %%i 0!n!.%%a) else ren %%i !n!.%%a
- set /a n += 1
- )))))
- 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
- @echo off
- setlocal enableDelayedExpansion
- set "mydir=E:\图片\1"
-
- pushd "%mydir%"
- for /l %%n in (1,1,3000)do (
- set/a newname=10000+%%n
- ren %%n.jpg !newname:~-4!.jpg
- echo ren %%n.jpg !newname:~-4!.jpg
- )
- 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
- @echo off
- setlocal enabledelayedexpansion
- for %%a in (*.jpg) do (
- set "str=%%~na"
- set "str=!str:~1,-1!"
- set /a str+=999
- ren "%%a" "!str!.jpg"
- )
- 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吧。- @echo off
- setlocal enabledelayedexpansion
- md newfolder
- for %%a in (*.jpg) do (
- set "str=%%~na"
- set "str=!str:~1,-1!"
- set /a str+=999
- copy "%%a" "newfolder\!str!.jpg"
- )
- 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删掉- @echo off & cd /d "%~dp0"
- REM 图片文件夹
- set "dir=%~dp0"
- REM 图片后缀
- set "ext=.jpg"
- set "str=0000000000"
- REM 开始序号
- set "startIndex=1000"
- REM 排序代码
- 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"
- REM 顺序更名
- for /f "tokens=1* delims=?" %%i in ('%code%') do (
- echo %%j
- call set "n=%str%%%startIndex%%"
- call echo %%n:~-4%%.jpg
- REM call rename "%%j" "%%n:~-4%%.jpg"
- set /a "startIndex+=1"
- echo -------------------------
- )
- pause&exit
复制代码
作者: cutebe 时间: 2021-3-16 20:11
- @echo off
- setlocal enableDelayedExpansion
-
- ::命名起始序号
- set n=1000
- ::图片所在目录
- set "mydir=E:\图片\1"
-
- pushd "%mydir%"
- for /l %%i in (1,1,3000)do (
- set/a num=n+%%i-1
- ren "(%%i).jpg" !num!.jpg
- echo ren "(%%i).jpg" !num!.jpg
- )
- 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 |