标题: [文件操作] 【已解决】求教批处理如何按年份季节批量分类文件夹? [打印本页]
作者: 52hz 时间: 2023-5-24 09:23 标题: 【已解决】求教批处理如何按年份季节批量分类文件夹?
本帖最后由 52hz 于 2024-4-12 13:40 编辑
有一堆文件夹,内含图片,命名规律如下:
https://imgse.com/i/p9TXvkt
前两位代表年份,第三位无固定规律,第四位1-4代表季节春夏秋冬
需要将文件夹按年份季节分类,比如第一个文件夹同时包含多个年份和多个季节,那就需要在22年春,23年春,24年夏,25年冬四个目录里都有这个文件夹存在
分类后如下:
https://imgse.com/i/p9TXXTI
https://imgse.com/i/p9TXO0A
我一开始的思路是,先将这个目录遍历输出txt文档,然后用 findstr 命令,在每一行里搜年份,但这样只能分出年份,到季节就卡住了。
并且,如果用for循环的delims把每一行打散成单个去匹配的话,它是把每一段按顺序给abcd不同的变量,这样子就需要把每个变量匹配一遍,并且每个文件夹打散后的变量个数也不固定。
菜鸟已经思路枯竭。
跪求大佬们给个好用的方案。
多谢~
作者: qixiaobin0715 时间: 2023-5-24 11:54
本帖最后由 qixiaobin0715 于 2023-5-24 12:19 编辑
批处理文件保存为ANSI编码,未测试:- @echo off
- setlocal enabledelayedexpansion
- for %%a in (春 夏 秋 冬) do (
- set /a n+=1
- set _!n!=%%a
- )
- for /f "delims=" %%i in ('dir /b /ad') do (
- set Folder=%%i
- set Folder=!Folder:+= !
- for %%j in (!Folder!) do (
- set str=%%j
- set str=!str:~,2! !str:~-1!
- for /f "tokens=1*" %%k in ("!str!") do (
- if not exist "%%k年\!_%%l!\%%i" md "%%k年\!_%%l!\%%i"
- copy "%%i\*.*" "%%k年\!_%%l!\%%i\"
- )
- )
- )
- pause
复制代码
作者: 52hz 时间: 2023-5-24 13:57
回复 2# qixiaobin0715
多谢大佬,测试没问题,很好用,我学习到了很多。
首先是学到了for的又一种用法,不加参数,in后的括号里的内容自动以空格断开成每一段给到变量,受教了。
另外有一点没有看懂想请教:
第一个for里循环了一遍春夏秋冬以后,把 _!n! 和 春、夏、秋、冬绑定了,后续代码中也没有出现 %%a 和 !n! 两个变量,但建立的文件夹却是春夏秋冬
我猜测是当 !_%%l! 等于 _1 时就自动用 ”春“ 来代替了
但是为什么我用echo输出 _!n! 的时候显示的 还是_1,而不是春
并且测试了 echo _%%l,和 echo _1 , 显示出来的也还是 _1
这里有什么隐藏的知识点么,恳请大佬赐教。
作者: qixiaobin0715 时间: 2023-5-24 14:11
echo !_%%l!
echo !_1!
试试
作者: 52hz 时间: 2023-5-24 14:22
回复 4# qixiaobin0715
明白了,多谢大佬点拨,谢谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |