找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 15082|回复: 12

[文件操作] [已解决]批处理如何根据文件名来分类图片?

[复制链接]
发表于 2024-8-4 09:25:58 | 显示全部楼层 |阅读模式
本帖最后由 liaoguinan 于 2024-8-4 19:26 编辑



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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-8-4 10:16:00 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2024-8-4 10:52:54 | 显示全部楼层
回复 2# ShowCode


    图片有两种特殊的名称那种好像没分别分类?
发表于 2024-8-4 11:24:33 | 显示全部楼层
回复 3# liaoguinan


    请归纳总结特殊名称的对应关系。61、62、99除了这三个还有别的吗,它们跟小白、小明的是根据什么条件对应的?
 楼主| 发表于 2024-8-4 12:25:47 | 显示全部楼层
回复 4# ShowCode


    61、62......到69.   都归类小明。。。99固定小白
发表于 2024-8-4 16:07:53 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
liaoguinan + 1 感谢

查看全部评分

 楼主| 发表于 2024-8-4 16:29:41 | 显示全部楼层
本帖最后由 liaoguinan 于 2024-8-4 16:31 编辑

回复 6# aloha20200628


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



发表于 2024-8-4 16:55:04 | 显示全部楼层
回复 7# liaoguinan

6楼代码已订正,再试试吧...
发表于 2024-8-5 00:01:35 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
liaoguinan + 1 感谢

查看全部评分

 楼主| 发表于 2024-8-5 07:15:46 | 显示全部楼层
回复 9# 77七


    感谢这个看起来更加简单明了
发表于 2024-8-5 08:38:57 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2024-8-5 09:50:31 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2024-8-5 18:25:58 | 显示全部楼层
回复 12# aloha20200628


    厉害学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 22:06 , Processed in 0.023591 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表