标题: [文件操作] [已解决]BAT脚本批量将图片名称改为连续数字 [打印本页]
作者: hxc1995 时间: 2024-9-27 18:29 标题: [已解决]BAT脚本批量将图片名称改为连续数字
本帖最后由 hxc1995 于 2024-9-29 14:49 编辑
- @echo off
- REM
- setlocal enabledelayedexpansion
- set count=10000
- REM count=10000, 命名从0001开始
- for /f "delims=" %%i in ('dir /b *.jpg,*.png,*.bmp,*.jpeg,*.gif') do call:Rename "%%~i"
- pause
- exit
-
- :Rename
- set /a count+=1
- if /i "%~1"=="!count:~1!%~x1" goto :eof
- if exist "!count:~1!%~x1" goto Rename
- echo 改名:%1 !count:~1!
- ren "%~1" "!count:~1!%~x1"
- REM 修改为000x
- goto :eof
复制代码
这个代码想改成将子文件下的内容重命名,怎么修改
作者: aloha20200628 时间: 2024-9-27 19:24
本帖最后由 aloha20200628 于 2024-9-27 19:25 编辑
回复 1# hxc1995 - @echo off &setlocal &set "n=0"
- for /f "delims=" %%F in ('dir /b/a-d *.jpg,*.png,*.bmp,*.jpeg,*.gif') do (call :R "%%F")
- pause&exit/b
- :R
- set/a "n+=1"
- set "_nF=0000%n%"
- set "_nF=%_nF:~-4%"
- if exist "%_nF%%~x1" goto :R
- ren "%~1" "%_nF%%~x1" &exit/b
复制代码
作者: 77七 时间: 2024-9-27 20:42
1楼的代码可能恰好满足了楼主的需求,但是实际上情况比较复杂。
楼主不妨“忘掉”1楼的代码,完整描述需求即可...另外涉及子文件夹,还有个序号是否重置问题
作者: hxc1995 时间: 2024-9-28 09:47
本帖最后由 hxc1995 于 2024-9-28 09:52 编辑
回复 3# 77七
我是想把文件夹下所有子文件夹内的照片用数字命名排序,上述代码都只能处理文件夹内的照片,应该是要加:cd /d "%~dp0"这个代码吧
作者: hxc1995 时间: 2024-9-28 09:53
回复 2# aloha20200628
这个只能处理文件夹内的照片,不能处理所有子文件夹内的照片
作者: qixiaobin0715 时间: 2024-9-28 10:21
本帖最后由 qixiaobin0715 于 2024-9-28 10:38 编辑
- @echo off
- set n=10000
- for /f "delims=" %%i in ('dir /b /ad') do (
- pushd "%%i"
- setlocal enabledelayedexpansion
- for /f "delims=" %%j in ('dir /b /a-d *.jpg,*.png,*.bmp,*.jpeg,*.gif 2^>nul') do (
- set /a n+=1
- ren "%%j" "!n:~1!%%~xj"
- )
- endlocal
- popd
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-9-28 10:22
本帖最后由 aloha20200628 于 2024-9-28 10:47 编辑
回复 5# hxc1995
2楼代码第二行
'dir /b/a-d *.jpg,*.png,*.bmp,*.jpeg,*.gif'
改为》
'dir /b/s/a-d *.jpg,*.png,*.bmp,*.jpeg,*.gif'
即可包括各级子目录...
作者: qixiaobin0715 时间: 2024-9-28 10:40
回复 1# hxc1995
代码稍作修改,屏蔽了“找不到文件”的报错显示
作者: 77七 时间: 2024-9-28 13:22
1楼的代码,判断了目录内是否已经存在 如 0002.jpg,假如存在 会把前一个文件如0001.jpg改名了0003.jpg,然后遍历到0002.jpg仍对其进行了改名,可能是0004.jpg。还有同序号不同扩展名情况。
以下代码,对上述情况进行修改,适合对编号后新加入文件按序号从小到大查漏补缺进行编号,确保新编号文件在多个子目录内编号唯一。楼主根据实际需要自行选用。- @echo off
- cd /d "%~dp0"
- set "list=*.jpg *.png *.bmp *.jpeg *.gif"
- setlocal enabledelayedexpansion
- (for /l %%l in (10001,1,19999) do (
- set n=%%l
- echo !n:~-4!
- )) > $1
- endlocal
- (for /r /d %%d in (*) do (
- pushd "%%d"
- for /f "delims=" %%i in ('dir /b /a-d %list% ^|findstr /rixc:"[0-9][0-9][0-9][0-9]\.[a-z]*"') do (
- echo %%~ni
- )
- popd
- )) > $2
- findstr /vg:$2 $1 > $3
- (for /r /d %%d in (*) do (
- pushd "%%d"
- for /f "delims=" %%i in ('dir /b /a-d %list% ^|findstr /rivxc:"[0-9][0-9][0-9][0-9]\.[a-z]*"') do (
- set /p str=
- set file=%%i
- setlocal enabledelayedexpansion
- ren "!file!" "!str!%%~xi"
- endlocal
- )
- popd
- )) < $3
- del $?
- pause
复制代码
作者: qixiaobin0715 时间: 2024-9-29 09:14
本帖最后由 qixiaobin0715 于 2024-9-29 09:17 编辑
6楼代码未考虑重名问题,这样简单一些:- @echo off
- set n=10000
- for /f "delims=" %%i in ('dir /b /ad') do (
- pushd "%%i"
- setlocal enabledelayedexpansion
- for /f "delims=" %%j in ('dir /b /a-d *.jpg,*.png,*.bmp,*.jpeg,*.gif 2^>nul') do (
- set /a n+=1
- ren "%%j" "!n:~1!%%~xj1"
- )
- for %%j in (jpg,png,bmp,jpeg,gif) do (if exist *.%%j1 ren *.%%j1 *.%%j)
- endlocal
- popd
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |