标题: [文件操作] 批处理如何给文件夹内的图片批量命名 [打印本页]
作者: umenoko 时间: 2021-2-26 15:25 标题: 批处理如何给文件夹内的图片批量命名
比如文件夹名称为AA
文件夹内的图片依次命名为
AA-01.jpg
AA-02.jpg
AA-03.jpg
...
我网上搜的- @echo off
- call :loop "%cd%"
- for %%a in (*.jpg) do (
- set /a n+=1
- set "str=%%a"
- setlocal enabledelayedexpansion
- ren "!str!" "%var%-!n!%%~xa"
- endlocal
- )
- pause&exit
- :loop
- set "var=%~nx1"
复制代码
运行之后发现不是-02而是-2
而且没有-1这张图
请大神指点,在线等,感激不尽!
作者: qixiaobin0715 时间: 2021-2-26 15:56
本帖最后由 qixiaobin0715 于 2021-2-26 16:20 编辑
- @echo off
- set n=100
- setlocal enabledelayedexpansion
- for %%i in (*.jpg) do (
- set /a n+=1
- for /d %%a in ("%%~dpi.") do ren "%%i" "%%~na-!n:~1!%%~xi"
- )
- pause
复制代码
作者: umenoko 时间: 2021-2-26 15:59
回复 2# qixiaobin0715
谢谢,但是运行出来的结果,文件夹好像不是存放图片的文件夹,是最外面的母文件夹
作者: smss 时间: 2021-2-26 16:00
- @Echo off&SetLocal EnableDelayedExpansion&set n=100
- for /d %%i in (*)do for /r %%j in (*.bmp,*.jpg,*.gif,*.png)do set /a n+=1&ren "%%j" "%%~ni-!n:~1!%%~xj"
- pause
复制代码
作者: umenoko 时间: 2021-2-26 16:07
回复 4# smss
亲,这个运行不成功
作者: smss 时间: 2021-2-26 16:11
批处理保存为ANSI编码 放入需要处理的文件夹下运行
善用搜索http://www.bathome.net/thread-2873-1-1.html
作者: umenoko 时间: 2021-2-26 16:16
本帖最后由 umenoko 于 2021-2-26 16:20 编辑
回复 6# smss
不好意思啊我是个小白
楼上那位我复制代码进txt,然后后缀改为bat就能运行了。可是运行出来的文件夹名称是最外面那个母文件夹的名称,不知道原因出在哪里
作者: umenoko 时间: 2021-2-26 16:20
回复 6# smss
您给的代码, txt文件是ANSI编码,但是运行不成功
作者: qixiaobin0715 时间: 2021-2-26 16:21
已修改,多了个点
作者: umenoko 时间: 2021-2-26 16:27
回复 9# qixiaobin0715
谢谢大神修改,但是运行出来的结果没有-01.jpg的图片,从-02.jpg开始的
作者: qixiaobin0715 时间: 2021-2-26 16:35
我这里测试没问题:
作者: umenoko 时间: 2021-2-26 17:49
回复 11# qixiaobin0715
第一次运行↑
再次运行↑
我这边好像需要再次运行他才会出来-01.jpg欸,是我操作有什么问题吗?
作者: cutebe 时间: 2021-2-27 09:39
重命名问题经常会出现【名字重复】修改失败,增加检查重名后又会出现【序号跳过】的状况!
原因是:检查了新名字,没有检查原来的名字。
思路:一、计算文件个数,得到序号范围;
二、新旧文件名都检查,排除已改好的文件名;
三、修改其他的文件名。
作者: qixiaobin0715 时间: 2021-2-27 09:45
回复 13# cutebe
有道理
作者: qixiaobin0715 时间: 2021-2-27 09:50
回复 8# umenoko
移动重命名:- @echo off
- md newfolder
- set n=100
- setlocal enabledelayedexpansion
- for %%i in (*.jpg) do (
- set /a n+=1
- for /d %%a in ("%%~dpi.") do move "%%i" "newfolder\%%~na-!n:~1!%%~xi"
- )
- pause
复制代码
作者: cutebe 时间: 2021-2-27 10:33
思路不错,赞一个。移动到新目录可避免重名!
作者: cutebe 时间: 2021-2-28 14:17
放到图片同一目录下执行- ::图片顺序命名:前缀为目录名-后缀为等长数字(数字唯一,长度不足补0)
- ::思路:先得到文件数;再排除改好的文件;后修改其他文件名。
- @echo off
- cd/d%~dp0
-
- ::文件扩展名
- set "ext=.jpg;.png;.jpeg"
-
- ::获取目录名
- call :getDirName "%cd%" dirName
- echo 目录名 *%dirName%*
-
- set picNum=0
- ::计算图片数
- for %%p in (%ext:.=*.%)do set/a picNum+=1
- echo 目录中共有 %picNum% 个图片。
-
- ::补0个数
- set/a_0N=-1,CN=%picNum%,startNum=1
- :fill0
- set/a CN/=10,_0N+=1,startNum=%startNum%0,Nbit=_0N+1
- if %CN% neq 0 goto :fill0
- echo 起数:%startNum% 位数:%Nbit% 补0:%_0N%个。
-
- set/a renNum=startNum+1,_0=1
- ::改名
- setlocal enableDelayedExpansion
- for /f "delims=" %%p in ('dir/b %ext:.=*.%')do (
- call :oldNameChk chgYes "%%~np" "%dirName%" %picNum% %startNum%
- if defined _!chgYes! (
- call :newNameChk renNum %Nbit% "%ext%" "%dirName%"
- echo ren "%%p" "%dirName%-!renNum:~-%Nbit%!%%~xp"
- ren "%%p" "%dirName%-!renNum:~-%Nbit%!%%~xp"
- set/a renNum+=1
- )else set _!chgYes!=1
- )
-
- pause
- goto :eof
- ::====完====
-
-
- :getDirName dirPath dirName ::获取目录名
- set %2=%~nx1
- goto :eof
-
- :oldNameChk chgFlag fileName dirName fileNum beginNum ::旧名检查
- setlocal
- set "fileName=%~2"
- set "chkNum=!fileName:*%~3-=!"
- set fchk=0
- if "%~3-%chkNum%" neq %2 goto :chkend ::前缀检查:不含目录名或有多余字符
- for /f "delims=0123456789" %%s in ("%chkNum%")do set str=%%s
- if "%str%" neq "" goto :chkend ::后缀检查:后缀有非数字
- set/aN=1%chkNum%-%5
- if %N% gtr 0 if %N% leq %4 set fchk=%chkNum%
- :chkend ::跳到此处的要改名:后缀数字正常但文件名重复/未补0/不含目录名/含多余字符
- endlocal&set %1=%fchk%
- goto :eof
-
- :newNameChk renNum Numbit exts dirName ::新名检查
- setlocal
- set/a newNum=%1
- :plusNum
- for %%e in (%~3)do if exist "%~4-!newNum:~-%2!%%e" set/a newNum+=1&goto :plusNum
- endlocal&set "%1=%newNum%"
- goto :eof
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |