标题: [文件操作] 批处理对每种格式的图片重命名并添加序号,webp格式总是多计数一次 [打印本页]
作者: HappyXxxxxx 时间: 2023-5-19 09:47 标题: 批处理对每种格式的图片重命名并添加序号,webp格式总是多计数一次
写了一个根据图片的扩展名,对文件夹中每种格式的图片重命名并添加序号的小脚本,
运行后的文件名形如:
gif-001.gif,gif-002.gif, ......
jpg-001.jpg, jpg-002.jpg, ......
webp-001.webp, webp-002.webp, .......
运行以后发现:
对于GIF格式和JPG格式的图片,计数后重命名工作正常。
但是webp格式总是多计数一次,
如下图所示:
代码如下:- @echo off
-
- cd /d G:\ZL\DownLoad\JD_Pics_Collection
- echo %cd%
-
- for %%i in (*.*) do (ren %%i head%%i)
- rem 为了调试方便,本次运行前,先把上次的运行结果前面加个“head”前缀
-
- ren headfile_type_list.txt file_type_list.txt
-
-
- setlocal enabledelayedexpansion
-
- for /f %%i in (file_type_list.txt) do (
- echo %%i
- set /a count=0
- set file_type=%%i
- for %%j in (*.!file_type!) do (
- echo %%j
- set /a count+=1
-
- set cond1=ren "%%j" !file_type!-00!count!.!file_type! & echo "%%j" --^> !file_type!-00!count!.!file_type!
- set cond2=ren "%%j" !file_type!-0!count!.!file_type! & echo "%%j" --^> !file_type!-0!count!.!file_type!
- set cond3=ren "%%j" !file_type!-!count!.!file_type! & echo "%%j" --^> !file_type!-!count!.!file_type!
-
- if !count! LSS 10 (!cond1!) else (if !count! LSS 100 (!cond2!) else (!cond3!))
- )
- )
-
- PAUSE
复制代码
调试信息如下:
G:\ZL\DownLoad\JD_Pics_Collection
gif
headgif-001.gif
"headgif-001.gif" --> gif-001.gif
"headgif-001.gif" --> gif-01.gif
"headgif-001.gif" --> gif-1.gif
headgif-002.gif
"headgif-002.gif" --> gif-002.gif
"headgif-002.gif" --> gif-02.gif
"headgif-002.gif" --> gif-2.gif
headgif-003.gif
"headgif-003.gif" --> gif-003.gif
"headgif-003.gif" --> gif-03.gif
"headgif-003.gif" --> gif-3.gif
headgif-004.gif
"headgif-004.gif" --> gif-004.gif
"headgif-004.gif" --> gif-04.gif
"headgif-004.gif" --> gif-4.gif
headgif-005.gif
"headgif-005.gif" --> gif-005.gif
"headgif-005.gif" --> gif-05.gif
"headgif-005.gif" --> gif-5.gif
headgif-006.gif
"headgif-006.gif" --> gif-006.gif
"headgif-006.gif" --> gif-06.gif
"headgif-006.gif" --> gif-6.gif
headgif-007.gif
"headgif-007.gif" --> gif-007.gif
"headgif-007.gif" --> gif-07.gif
"headgif-007.gif" --> gif-7.gif
jpg
headjpg-001.jpg
"headjpg-001.jpg" --> jpg-001.jpg
"headjpg-001.jpg" --> jpg-01.jpg
"headjpg-001.jpg" --> jpg-1.jpg
headjpg-002.jpg
"headjpg-002.jpg" --> jpg-002.jpg
"headjpg-002.jpg" --> jpg-02.jpg
"headjpg-002.jpg" --> jpg-2.jpg
headjpg-003.jpg
"headjpg-003.jpg" --> jpg-003.jpg
"headjpg-003.jpg" --> jpg-03.jpg
"headjpg-003.jpg" --> jpg-3.jpg
headjpg-004.jpg
"headjpg-004.jpg" --> jpg-004.jpg
"headjpg-004.jpg" --> jpg-04.jpg
"headjpg-004.jpg" --> jpg-4.jpg
headjpg-005.jpg
"headjpg-005.jpg" --> jpg-005.jpg
"headjpg-005.jpg" --> jpg-05.jpg
"headjpg-005.jpg" --> jpg-5.jpg
headjpg-006.jpg
"headjpg-006.jpg" --> jpg-006.jpg
"headjpg-006.jpg" --> jpg-06.jpg
"headjpg-006.jpg" --> jpg-6.jpg
webp
headwebp-002.webp
"headwebp-002.webp" --> webp-001.webp
"headwebp-002.webp" --> webp-01.webp
"headwebp-002.webp" --> webp-1.webp
headwebp-003.webp
"headwebp-003.webp" --> webp-002.webp
"headwebp-003.webp" --> webp-02.webp
"headwebp-003.webp" --> webp-2.webp
headwebp-004.webp
"headwebp-004.webp" --> webp-003.webp
"headwebp-004.webp" --> webp-03.webp
"headwebp-004.webp" --> webp-3.webp
headwebp-005.webp
"headwebp-005.webp" --> webp-004.webp
"headwebp-005.webp" --> webp-04.webp
"headwebp-005.webp" --> webp-4.webp
webp-001.webp
"webp-001.webp" --> webp-005.webp
"webp-001.webp" --> webp-05.webp
"webp-001.webp" --> webp-5.webp
请按任意键继续. . .
从调试信息里面看,最后的这一段,
webp-001.webp
"webp-001.webp" --> webp-005.webp
"webp-001.webp" --> webp-05.webp
"webp-001.webp" --> webp-5.webp
webp-001.webp这个文件明明是重命名之后的结果,为啥还会被调用?
感觉很奇怪~
请各位大佬指点一下。
非常感谢!
作者: qixiaobin0715 时间: 2023-5-19 10:04
把所有无参数的循环中存在ren命令的,全部改为for /f形式看看。
作者: HappyXxxxxx 时间: 2023-5-19 10:28 标题: RE: 根据图片的扩展名,对每种格式的图片重命名并添加序号,webp格式总是多计数一次
把所有无参数的循环中存在ren命令的,全部改为for /f形式看看。
qixiaobin0715 发表于 2023-5-19 10:04
啊哈哈~
谢谢大佬!
大佬牛B(破音)~
改成:
- for /f "delims=" %%j in ('dir /a-d-h /b *.!file_type!')
复制代码
以后就啥问题也没有了,
我以后还是用大佬推荐这种写法吧!
:loveliness: :loveliness: :loveliness:
作者: qixiaobin0715 时间: 2023-5-19 10:51
感觉你写的代码有点乱,这样是不是要清楚一些:- @echo off
- for %%i in (gif jpg webp) do (
- setlocal enabledelayedexpansion
- for /f "delims=" %%j in ('dir /b /a-d "*.%%i"') do (
- set /a n+=1
- set m=00!n!
- set m=!m:~-3!
- ren "%%j" "%%i-!m!.%%i"
- )
- endlocal
- )
- pause
复制代码
未测试,思路应当是这样的。
作者: HappyXxxxxx 时间: 2023-5-19 11:01
回复 4# qixiaobin0715
大佬,
你这个写法好优雅啊~~
向大佬学习!
谢谢大佬!
作者: HappyXxxxxx 时间: 2023-5-19 11:11
回复 4# qixiaobin0715
再请教一下大佬,
您代码里面的“ endlocal”是干吗用的?不写这一句有啥影响?
小弟东一榔头西一棒槌,自学的批处理,
废了半天劲,
才知道只有用了setlocal enabledelayedexpansion才能让循环里面的值有变化……
作者: qixiaobin0715 时间: 2023-5-19 11:44
本帖最后由 qixiaobin0715 于 2023-5-19 12:32 编辑
通俗的讲就是结束变量延迟,碰到endlocal后,以前在setlocal----endlocal之间设置的所有的变量均失效。
可以体会一下这段代码:- @echo off
- setlocal enabledelayedexpansion
- set n=1
- echo,!n!
-
- setlocal enabledelayedexpansion
- set n=8
- echo,!n!
- endlocal
-
- echo,!n!
- pause
复制代码
作者: HappyXxxxxx 时间: 2023-5-19 13:17
回复 7# qixiaobin0715
原来是这个意思呀!
懂了。
谢谢大佬!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |