返回列表 发帖
本帖最后由 77七 于 2024-8-8 01:10 编辑

批处理统计文件夹内图片、视频数量及大小,并重命名文件夹
  1. @echo off
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"
  4. rem 排除特定文件(000,00.1,00.2,00.3),不需要可以删除下一行
  5. set "_f=^|findstr /rvix /c:"00\.[123]\.[jpb][pnm][gp]" /c:"000\.[jpb][pnm][gp]""
  6. (for /f "delims=" %%d in ('dir /b /ad') do (
  7. setlocal
  8. pushd "%%d"
  9. for /f %%a in ('dir /b /a-d *.jpg *.png *.bmp %_f% ^|find /c /v ""') do (
  10. set /a "1/%%a" && set P=%%aP
  11. )
  12. for /f %%a in ('dir /b /a-d *.mp4 *.avi *.mov *.mkv ^|find /c /v ""') do (
  13. set /a "1/%%a" && set V=%%aV
  14. )
  15. for /f "tokens=3" %%i in ('dir /-c /a-d *.jpg *.png *.bmp *.mp4 *.avi *.mov *.mkv ^|findstr /iec:" 字节"') do (
  16. for /f "tokens=1-2 delims=." %%a in ('powershell -c "$input = %%i; [math]::Round($input / (1024 * 1024 *1024), 2)"') do (
  17. set /a "1/%%a" && set "Z=%%a.%%bG" || for /f "delims=." %%c in ('powershell -c "%%i/1024/1024"') do set Z=%%cM
  18. )
  19. )
  20. popd
  21. if defined Z (
  22. call echo ren "%%d" "%%d [%%p%%%%V%%-%%Z%%]"
  23. )
  24. endlocal
  25. )) 2>nul
  26. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 5# walkercolin





0P0V0G这三个0在任何情况下都是不可能出现的
bat小白,请多指教!谢谢!

TOP

只用bat,适合粗略统计。数值不准确,也无需保留小数点后两位了
  1. @echo off
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"
  4. for %%a in ("000" "00.1" "00.2" "00.3") do (
  5. set _"%%~a"=1
  6. )
  7. set -=-
  8. for /f "delims=" %%d in ('dir /b /ad') do (
  9. set f=%%d
  10. setlocal enabledelayedexpansion
  11. pushd "!f!"
  12. for %%i in (*.jpg *.png *.bmp) do (
  13. if not defined _"%%~ni" (
  14. set /a p+=1
  15. )
  16. set /a m=%%~zi/1024,n+=m
  17. )
  18. set n/=1024
  19. for %%i in (*.mp4 *.avi *.mov *.mkv) do (
  20. set /a v+=1
  21. set t=%%~zi
  22. set t=!t:~0,-3!
  23. if "!t!" neq "" (
  24. set /a n+=!t!/1024
  25. )
  26. )
  27. popd
  28. for %%a in (P V) do (
  29. if defined %%a (
  30. set str=!str!!%%a!%%a
  31. )
  32. )
  33. if !n! gtr 1024 (
  34. set /a x=n/1024
  35. echo ren "!f!" "!f![!str!-!x!G]"
  36. ) else if !n! neq 0 (
  37. echo ren "!f!" "!f![!str!-!n!M]"
  38. )
  39. endlocal
  40. )
  41. pause
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2024-8-28 13:32 编辑

回复 18# walkercolin


代码中的计算方式是terse大佬的代码,我数学不好,认真看,还是存在数学问题上的鸿沟,即使数学老师在,我估计也要学习很久,所以不想了,只是从for /l 字符串截取不为空的前提下,改动了一下 计算长度,和 for /l 中的结尾数字,不一定对,请多包涵。

  1. @echo off
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"
  4. rem 排除特定文件(000,00.1,00.2,00.3),不需要可以删除下一行
  5. set "_f=^|findstr /rvix /c:"00\.[123]\.[jpb][pnm][gp]" /c:"000\.[jpb][pnm][gp]""
  6. (for /f "delims=" %%d in ('dir /b /ad') do (
  7. setlocal
  8. pushd "%%d"
  9. if not errorlevel 1 (
  10. for /f %%a in ('dir /b /a-d *.jpg *.png *.bmp %_f% ^|find /c /v ""') do (
  11. set /a "1/%%a" && set P=%%aP
  12. )
  13. for /f %%a in ('dir /b /a-d *.mp4 *.avi *.mov *.mkv ^|find /c /v ""') do (
  14. set /a "1/%%a" && set V=%%aV
  15. )
  16. set m=1048576
  17. for /f "eol=0tokens=3" %%j in ('dir /s /a-d /-c *.jpg *.png *.bmp *.mp4 *.avi *.mov *.mkv 2^>nul^| findstr /i "个文件.*字节$"') do (
  18. set size=%%j00
  19. setlocal enabledelayedexpansion
  20. if !size! geq 102400 (
  21. if !size! geq 104857600 (
  22. set s=MB
  23. set t=!size!
  24. set len=!t:~9!9876543210
  25. set /a len=!len:~9,1!+9
  26. set /a "r=!t:~,8!%%m,size=!t:~,8!/m"
  27. set /a len-=1
  28. for /l %%j in (8 1 !len!) do (
  29. set/a "q=!r!!t:~%%j,1!/m,r=!r!!t:~%%j,1!%%m"
  30. set "size=!size!!q!"
  31. )
  32. if !size! geq 102400 set s=GB&set /asize/=1024
  33. ) else set s=KB&set /asize/=1024
  34. ) else set s=Byte
  35. for /f "tokens=1-3" %%a in ("!size:~,-2! !size:~-2! !s!") do (
  36. endlocal
  37. set Z=%%a.%%b%%c
  38. )
  39. )
  40. popd
  41. if defined Z (
  42. call echo ren "%%d" "%%d [%%p%%%%V%%-%%Z%%]"
  43. )
  44. )
  45. endlocal
  46. )) 2>nul
  47. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

返回列表