[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]BAT脚本批量将图片名称改为连续数字

本帖最后由 hxc1995 于 2024-9-29 14:49 编辑
  1. @echo off
  2. REM
  3. setlocal enabledelayedexpansion
  4. set count=10000
  5. REM count=10000, 命名从0001开始
  6. for /f "delims=" %%i in ('dir /b *.jpg,*.png,*.bmp,*.jpeg,*.gif') do call:Rename "%%~i"
  7. pause
  8. exit
  9. :Rename
  10. set /a count+=1
  11. if /i "%~1"=="!count:~1!%~x1" goto :eof
  12. if exist "!count:~1!%~x1" goto Rename
  13. echo 改名:%1 !count:~1!
  14. ren "%~1" "!count:~1!%~x1"
  15. REM 修改为000x
  16. goto :eof
复制代码
这个代码想改成将子文件下的内容重命名,怎么修改
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 aloha20200628 于 2024-9-27 19:25 编辑

回复 1# hxc1995
  1. @echo off &setlocal &set "n=0"
  2. for /f "delims=" %%F in ('dir /b/a-d *.jpg,*.png,*.bmp,*.jpeg,*.gif') do (call :R "%%F")
  3. pause&exit/b
  4. :R
  5. set/a "n+=1"
  6. set "_nF=0000%n%"
  7. set "_nF=%_nF:~-4%"
  8. if exist "%_nF%%~x1" goto :R
  9. ren "%~1" "%_nF%%~x1" &exit/b
复制代码

TOP

1楼的代码可能恰好满足了楼主的需求,但是实际上情况比较复杂。
楼主不妨“忘掉”1楼的代码,完整描述需求即可...另外涉及子文件夹,还有个序号是否重置问题
bat小白,请多指教!谢谢!

TOP

本帖最后由 hxc1995 于 2024-9-28 09:52 编辑

回复 3# 77七
我是想把文件夹下所有子文件夹内的照片用数字命名排序,上述代码都只能处理文件夹内的照片,应该是要加:cd /d "%~dp0"这个代码吧

TOP

回复 2# aloha20200628
这个只能处理文件夹内的照片,不能处理所有子文件夹内的照片

TOP

本帖最后由 qixiaobin0715 于 2024-9-28 10:38 编辑
  1. @echo off
  2. set n=10000
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.     pushd "%%i"
  5.     setlocal enabledelayedexpansion
  6.     for /f "delims=" %%j in ('dir /b /a-d *.jpg,*.png,*.bmp,*.jpeg,*.gif 2^>nul') do (
  7.         set /a n+=1
  8.         ren "%%j" "!n:~1!%%~xj"
  9.     )
  10.     endlocal
  11.     popd
  12. )
  13. pause
复制代码
1

评分人数

    • hxc1995: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

本帖最后由 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'
即可包括各级子目录...

TOP

回复 1# hxc1995
代码稍作修改,屏蔽了“找不到文件”的报错显示

TOP

1楼的代码,判断了目录内是否已经存在 如 0002.jpg,假如存在 会把前一个文件如0001.jpg改名了0003.jpg,然后遍历到0002.jpg仍对其进行了改名,可能是0004.jpg。还有同序号不同扩展名情况。
以下代码,对上述情况进行修改,适合对编号后新加入文件按序号从小到大查漏补缺进行编号,确保新编号文件在多个子目录内编号唯一。楼主根据实际需要自行选用。
  1. @echo off
  2. cd /d "%~dp0"
  3. set "list=*.jpg *.png *.bmp *.jpeg *.gif"
  4. setlocal enabledelayedexpansion
  5. (for /l %%l in (10001,1,19999) do (
  6. set n=%%l
  7. echo !n:~-4!
  8. )) > $1
  9. endlocal
  10. (for /r /d %%d in (*) do (
  11. pushd "%%d"
  12. for /f "delims=" %%i in ('dir /b /a-d %list% ^|findstr /rixc:"[0-9][0-9][0-9][0-9]\.[a-z]*"') do (
  13. echo %%~ni
  14. )
  15. popd
  16. )) > $2
  17. findstr /vg:$2 $1 > $3
  18. (for /r /d %%d in (*) do (
  19. pushd "%%d"
  20. for /f "delims=" %%i in ('dir /b /a-d %list% ^|findstr /rivxc:"[0-9][0-9][0-9][0-9]\.[a-z]*"') do (
  21. set /p str=
  22. set file=%%i
  23. setlocal enabledelayedexpansion
  24. ren "!file!" "!str!%%~xi"
  25. endlocal
  26. )
  27. popd
  28. )) < $3
  29. del $?
  30. pause
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 qixiaobin0715 于 2024-9-29 09:17 编辑

6楼代码未考虑重名问题,这样简单一些:
  1. @echo off
  2. set n=10000
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.     pushd "%%i"
  5.     setlocal enabledelayedexpansion
  6.     for /f "delims=" %%j in ('dir /b /a-d *.jpg,*.png,*.bmp,*.jpeg,*.gif 2^>nul') do (
  7.         set /a n+=1
  8.         ren "%%j" "!n:~1!%%~xj1"
  9.     )
  10.     for %%j in (jpg,png,bmp,jpeg,gif) do (if exist *.%%j1 ren *.%%j1 *.%%j)
  11.     endlocal
  12.     popd
  13. )
  14. pause
复制代码

TOP

返回列表