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

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

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



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

1

评分人数

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

回复 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
复制代码
测试代码之前请做好备份

TOP

回复 2# ShowCode


    图片有两种特殊的名称那种好像没分别分类?

TOP

回复 3# liaoguinan


    请归纳总结特殊名称的对应关系。61、62、99除了这三个还有别的吗,它们跟小白、小明的是根据什么条件对应的?
测试代码之前请做好备份

TOP

回复 4# ShowCode


    61、62......到69.   都归类小明。。。99固定小白

TOP

本帖最后由 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

评分人数

TOP

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

回复 6# aloha20200628


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



TOP

回复 7# liaoguinan

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

TOP

本帖最后由 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

评分人数

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

TOP

回复 9# 77七


    感谢这个看起来更加简单明了

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码

TOP

回复 12# aloha20200628


    厉害学习了

TOP

返回列表