Board logo

标题: [文件操作] [已解决]批处理如何根据文件名来分类图片? [打印本页]

作者: liaoguinan    时间: 2024-8-4 09:25     标题: [已解决]批处理如何根据文件名来分类图片?

本帖最后由 liaoguinan 于 2024-8-4 19:26 编辑



如何根据上方的这种文件名创建对应文件夹把对应的图片放入内?


作者: ShowCode    时间: 2024-8-4 10:16

回复 1# liaoguinan


桌面\新建文件夹\分类.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.     echo Folder: "%%i"
  5.     pushd "%%i"
  6.     for /f "tokens=1-3* delims=-" %%a in ('dir /b /a-d *-*-*-*') do (
  7.         if not exist "%%a-%%b-%%c" (
  8.             md "%%a-%%b-%%c"
  9.         )
  10.         move "%%a-%%b-%%c-%%d" "%%a-%%b-%%c\"
  11.     )
  12.     popd
  13. )
  14. pause
复制代码

作者: liaoguinan    时间: 2024-8-4 10:52

回复 2# ShowCode


    图片有两种特殊的名称那种好像没分别分类?
作者: ShowCode    时间: 2024-8-4 11:24

回复 3# liaoguinan


    请归纳总结特殊名称的对应关系。61、62、99除了这三个还有别的吗,它们跟小白、小明的是根据什么条件对应的?
作者: liaoguinan    时间: 2024-8-4 12:25

回复 4# ShowCode


    61、62......到69.   都归类小明。。。99固定小白
作者: aloha20200628    时间: 2024-8-4 16:07

本帖最后由 aloha20200628 于 2024-8-4 17:35 编辑

回复 5# liaoguinan

以下代码存为test.bat,置于 1000-0005,1000-0006 文件夹所在目录下运行...
假设目标文件名 *.jpg 最后一个数值字段的值域=0-99。
  1. @echo off &for /d %%d in (*) do (
  2. pushd "%%d"
  3. for /f "delims=" %%F in ('dir /b/s/a-d *.jpg') do (
  4. set "s=%%~nF" &setlocal enabledelayedexpansion
  5. for %%e in ("!s:-=\!") do (set "e1=%%~nxe")
  6. if !e1! leq 9 (set "s=!s:~0,-2!") else (set "s=!s:~0,-3!")
  7. for %%e in ("!s:-=\!") do (set "e2=%%~nxe")
  8. if !e1! geq 61 if !e1! leq 69 (set "dF=%%~nxd-小明") else if !e1! equ 99 (set "dF=%%~nxd-小白")
  9. if not defined dF (set "dF=%%~nxd-!e2!")
  10. if not exist "!dF!" md "!dF!"
  11. 2>nul move /y "%%F" "!dF!\" &endlocal
  12. )
  13. popd
  14. )
  15. pause&exit/b
复制代码

作者: liaoguinan    时间: 2024-8-4 16:29

本帖最后由 liaoguinan 于 2024-8-4 16:31 编辑

回复 6# aloha20200628


    这个代码好像有点问题,
尾号7~9的会和小明文件夹一起放。超过10的会创建一个文件夹放?




作者: aloha20200628    时间: 2024-8-4 16:55

回复 7# liaoguinan

6楼代码已订正,再试试吧...

作者: 77七    时间: 2024-8-5 00:01

本帖最后由 77七 于 2024-8-5 00:02 编辑

看图找规律
  1. @echo off
  2. cd /d "%~dp0"
  3. (for /d %%d in (*) do (
  4. pushd "%%d"
  5. md "小明" "小白"
  6. for /l %%l in (61 1 69) do (
  7. move "*-000-%%l.*" "小明\"
  8. )
  9. move "*-000-99.*" "小白\"
  10. for /f "tokens=1-3 delims=-" %%a in ('dir /b /a-d') do (
  11. md "%%a-%%b-%%c"
  12. move "%%a-%%b-%%c-*" "%%a-%%b-%%c\"
  13. )
  14. rd "小明" "小白"
  15. popd
  16. )) 2>nul
  17. pause
复制代码

作者: liaoguinan    时间: 2024-8-5 07:15

回复 9# 77七


    感谢这个看起来更加简单明了
作者: qixiaobin0715    时间: 2024-8-5 08:38

本帖最后由 qixiaobin0715 于 2024-8-5 08:41 编辑

先处理完小白和小明的特殊问题,其它就简单一些:、
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /ad') do (
  3.     pushd "%%i"
  4.     if exist "%%i-000-99.jpg" (
  5.         md "%%i-小白"
  6.         move "%%i-000-99.jpg" "%%i-小白\"
  7.     ) else if exist "%%i-000-6?.jpg" (
  8.         md "%%i-小明"
  9.         move "%%i-000-6?.jpg" "%%i-小明\"
  10.     )
  11.     for /f "delims=" %%k in ('dir /b /a-d *-*-*-*.jpg') do (
  12.         for /f "tokens=3* delims=-" %%a in ("%%k") do (
  13.             md "%%i-%%a" 2>nul
  14.             move "%%i-%%a-%%b" "%%i-%%a"
  15.         )
  16.     )
  17.     popd
  18. )
  19. pause
复制代码

作者: aloha20200628    时间: 2024-8-5 09:50

本帖最后由 aloha20200628 于 2024-8-5 14:44 编辑


     6楼代码进一步优化如下 》无论文件名包含多少个被分隔的字段,总可顺序提取最后1-2个字段,同时去除了匹配最后一个数字编号字段的位数限制,从而能够自适应文件数量较多的实况
     正好用本帖题型操练一把 ‘纯P方法反向顺序提取字符串被分隔的字段’ ...
  1. @echo off &for /d %%d in (*) do (
  2. pushd "%%d"
  3. for /f "delims=" %%F in ('dir /b/s/a-d *.jpg') do (
  4. set "s=\x\%%~nF" &setlocal enabledelayedexpansion
  5. for %%e in ("!s:-=\!") do (set "e1=%%~nxe"&set "s=%%~pe")
  6. for %%e in ("!s:~0,-1!") do set "e2=%%~nxe"
  7. if !e1! geq 61 if !e1! leq 69 (set "dF=%%~nxd-小明") else if !e1! equ 99 (set "dF=%%~nxd-小白")
  8. if not defined dF (set "dF=%%~nxd-!e2!")
  9. if not exist "!dF!" md "!dF!"
  10. 2>nul move /y "%%F" "!dF!\" &endlocal
  11. )
  12. popd
  13. )
  14. pause&exit/b
复制代码

作者: liaoguinan    时间: 2024-8-5 18:25

回复 12# aloha20200628


    厉害学习了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2