标题: [文件操作] [已解决]批处理如何根据文件名来分类图片? [打印本页]
作者: liaoguinan 时间: 2024-8-4 09:25 标题: [已解决]批处理如何根据文件名来分类图片?
本帖最后由 liaoguinan 于 2024-8-4 19:26 编辑
如何根据上方的这种文件名创建对应文件夹把对应的图片放入内?
作者: ShowCode 时间: 2024-8-4 10:16
回复 1# liaoguinan
桌面\新建文件夹\分类.bat- @echo off
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /ad') do (
- echo Folder: "%%i"
- pushd "%%i"
- for /f "tokens=1-3* delims=-" %%a in ('dir /b /a-d *-*-*-*') do (
- if not exist "%%a-%%b-%%c" (
- md "%%a-%%b-%%c"
- )
- move "%%a-%%b-%%c-%%d" "%%a-%%b-%%c\"
- )
- popd
- )
- 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。
- @echo off &for /d %%d in (*) do (
- pushd "%%d"
- for /f "delims=" %%F in ('dir /b/s/a-d *.jpg') do (
- set "s=%%~nF" &setlocal enabledelayedexpansion
- for %%e in ("!s:-=\!") do (set "e1=%%~nxe")
- if !e1! leq 9 (set "s=!s:~0,-2!") else (set "s=!s:~0,-3!")
- for %%e in ("!s:-=\!") do (set "e2=%%~nxe")
- if !e1! geq 61 if !e1! leq 69 (set "dF=%%~nxd-小明") else if !e1! equ 99 (set "dF=%%~nxd-小白")
- if not defined dF (set "dF=%%~nxd-!e2!")
- if not exist "!dF!" md "!dF!"
- 2>nul move /y "%%F" "!dF!\" &endlocal
- )
- popd
- )
- 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 编辑
看图找规律
- @echo off
- cd /d "%~dp0"
- (for /d %%d in (*) do (
- pushd "%%d"
- md "小明" "小白"
- for /l %%l in (61 1 69) do (
- move "*-000-%%l.*" "小明\"
- )
- move "*-000-99.*" "小白\"
- for /f "tokens=1-3 delims=-" %%a in ('dir /b /a-d') do (
- md "%%a-%%b-%%c"
- move "%%a-%%b-%%c-*" "%%a-%%b-%%c\"
- )
- rd "小明" "小白"
- popd
- )) 2>nul
- pause
复制代码
作者: liaoguinan 时间: 2024-8-5 07:15
回复 9# 77七
感谢这个看起来更加简单明了
作者: qixiaobin0715 时间: 2024-8-5 08:38
本帖最后由 qixiaobin0715 于 2024-8-5 08:41 编辑
先处理完小白和小明的特殊问题,其它就简单一些:、- @echo off
- for /f "delims=" %%i in ('dir /b /ad') do (
- pushd "%%i"
- if exist "%%i-000-99.jpg" (
- md "%%i-小白"
- move "%%i-000-99.jpg" "%%i-小白\"
- ) else if exist "%%i-000-6?.jpg" (
- md "%%i-小明"
- move "%%i-000-6?.jpg" "%%i-小明\"
- )
- for /f "delims=" %%k in ('dir /b /a-d *-*-*-*.jpg') do (
- for /f "tokens=3* delims=-" %%a in ("%%k") do (
- md "%%i-%%a" 2>nul
- move "%%i-%%a-%%b" "%%i-%%a"
- )
- )
- popd
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-8-5 09:50
本帖最后由 aloha20200628 于 2024-8-5 14:44 编辑
6楼代码进一步优化如下 》无论文件名包含多少个被分隔的字段,总可顺序提取最后1-2个字段,同时去除了匹配最后一个数字编号字段的位数限制,从而能够自适应文件数量较多的实况
正好用本帖题型操练一把 ‘纯P方法反向顺序提取字符串被分隔的字段’ ...
- @echo off &for /d %%d in (*) do (
- pushd "%%d"
- for /f "delims=" %%F in ('dir /b/s/a-d *.jpg') do (
- set "s=\x\%%~nF" &setlocal enabledelayedexpansion
- for %%e in ("!s:-=\!") do (set "e1=%%~nxe"&set "s=%%~pe")
- for %%e in ("!s:~0,-1!") do set "e2=%%~nxe"
- if !e1! geq 61 if !e1! leq 69 (set "dF=%%~nxd-小明") else if !e1! equ 99 (set "dF=%%~nxd-小白")
- if not defined dF (set "dF=%%~nxd-!e2!")
- if not exist "!dF!" md "!dF!"
- 2>nul move /y "%%F" "!dF!\" &endlocal
- )
- popd
- )
- pause&exit/b
复制代码
作者: liaoguinan 时间: 2024-8-5 18:25
回复 12# aloha20200628
厉害学习了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |