Board logo

标题: [文件操作] 【已解决】求教批处理如何按年份季节批量分类文件夹? [打印本页]

作者: 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编码,未测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (春 夏 秋 冬) do (
  4.     set /a n+=1
  5.     set _!n!=%%a
  6. )
  7. for /f "delims=" %%i in ('dir /b /ad') do (
  8.     set Folder=%%i
  9.     set Folder=!Folder:+= !
  10.     for %%j in (!Folder!) do (
  11.         set str=%%j
  12.         set str=!str:~,2! !str:~-1!
  13.         for /f "tokens=1*" %%k in ("!str!") do (
  14.             if not exist "%%k年\!_%%l!\%%i" md "%%k年\!_%%l!\%%i"
  15.             copy "%%i\*.*" "%%k年\!_%%l!\%%i\"
  16.         )
  17.     )
  18. )
  19. 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://www.bathome.net/) Powered by Discuz! 7.2