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

[文件操作] 【已解决】批处理如何自动按年份+上下年 分类文件夹?

[复制链接]
发表于 2024-7-25 15:28:13 | 显示全部楼层 |阅读模式
本帖最后由 zhengzhenhui 于 2024-7-26 15:45 编辑

将当前目录及其子目录中的所有文件递归地提取到当前目录,在提取过程中,如果遇到同名文件,会为其添加一个递增的数字后缀以确保文件名的唯一性,对于提取到当前目录的每个文件(除了 .bat 文件),获取其修改日期,并根据月份确定上半年和下半年分类,结束后删除所有空目录

评分

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

查看全部评分

发表于 2024-7-25 16:12:49 | 显示全部楼层
别的地方未看,代码第46--70行可简化为:
  1. if "!Month!" leq "06" (set "Season=上半年") else set "Season=下半年"
复制代码
 楼主| 发表于 2024-7-25 16:16:40 | 显示全部楼层
回复 2# qixiaobin0715


    上半年和下半年那个单独拎出来处理没有问题的,就是提取根目录,并处理同名文件按数字排序,再删除空文件夹这段代码加进去整个都运行不了
发表于 2024-7-25 16:24:36 | 显示全部楼层
ai写的错误代码,还这么长,没人愿意读80多行的ai错误代码,直接重新写反而更省事。
像移动文件重名添加序号,此类问题论坛内有很多相同帖子,没必要事事求助ai而忽视论坛吧?
 楼主| 发表于 2024-7-25 16:49:12 | 显示全部楼层
回复 4# 77七


    搜索过了论坛应该是关键词没查询到位,我再找找 ,俩段分开可以用,拼一起就不行,主要是想了解是中间哪里出问题了
发表于 2024-7-25 19:39:36 | 显示全部楼层
回复 5# zhengzhenhui


第34行的newname在哪里定义的?

   如果想学习bat,先打好基础...没必要盯着ai写的垃圾代码,研究它哪里错了。
 楼主| 发表于 2024-7-25 20:02:14 | 显示全部楼层
回复 6# 77七


    就是不会,才写自己凑半拉子交给ai来凑的,然后扣上面的字眼流程学习去印证的,论坛里面我是先搜了没有搜到,每个人学习的方法不一样,你要这样理解我也无话可说。
 楼主| 发表于 2024-7-25 20:32:20 | 显示全部楼层
本帖最后由 zhengzhenhui 于 2024-7-25 22:36 编辑

我先试的是,先提取目录下的文件,做同名按数字递增重命名,然后再获取文件修改日期做为分类,又试了一下先遍历所以文件,有同名按数字递增重命名,然后再获取文件修改日期做为分类,
发表于 2024-7-25 20:49:25 | 显示全部楼层
先要说清除需求,这样:
将当前目录的子目录中的所有文件递归地提取到当前目录
移动的每个文件(除了 .bat 文件),获取其修改日期,并根据月份确定上半年和下半年分类?怎么分类
如果遇到同名文件,会为其添加一个递增的数字后缀以确保文件名的唯一性,
删除所有空目录
发表于 2024-7-25 21:13:08 | 显示全部楼层
出于善意提醒,ai的很多代码即使能运行成功,但也是错的,不要被误导。以下代码一步到位,完成分类,避免了多余的添加序号问题。

  1. @echo off
  2. cd /d "%~dp0"
  3. set "dp=%~dp0"
  4. set "dp=%dp:\=\\%"
  5. set n=1
  6. for /f "delims=" %%i in ('dir /b /s /a-d ^|find /v "%~f0" ^|findstr /rvibc:\"%dp%[1-2][0-9][0-9][0-9]\\\"') do (
  7.         for /f "tokens=1-2 delims=/" %%a in ("%%~ti") do (
  8.                 setlocal
  9.                 if "%%b" leq "06" (
  10.                         call :1 "%%a\上半年" "%%i"
  11.                 ) else (
  12.                         call :1 "%%a\下半年" "%%i"
  13.                 )
  14.                 endlocal
  15.         )
  16. )
  17. for /f "delims=" %%i in ('dir /b /s /ad ^|sort /r') do (
  18.         rd "%%i" 2>nul
  19. )
  20. pause
  21. exit

  22.         :1
  23.         md "%~1" 2>nul
  24.         if not exist "%~1\%~n2%m%%~x2" (
  25.                 move "%~2" "%~1\%~n2%m%%~x2"
  26.                 exit /b
  27.         )
  28.         set /a n+=1
  29.         set m=_%n%
  30.         goto :1
复制代码

评分

参与人数 1技术 +1 收起 理由
zhengzhenhui + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-7-25 22:36:13 | 显示全部楼层
回复 10# 77七


    谢谢你的提醒,也感谢你的帮助,我试过前后几种方法。先提取文件做同名处理,或者遍历所有文件做同名处理,再或者放入临时文件夹做同名处理,都是出错,原来是变量的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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