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

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

本帖最后由 zhengzhenhui 于 2024-7-26 15:45 编辑

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

评分人数

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

回复 10# 77七


    谢谢你的提醒,也感谢你的帮助,我试过前后几种方法。先提取文件做同名处理,或者遍历所有文件做同名处理,再或者放入临时文件夹做同名处理,都是出错,原来是变量的问题

TOP

出于善意提醒,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

评分人数

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

TOP

先要说清除需求,这样:
将当前目录的子目录中的所有文件递归地提取到当前目录
移动的每个文件(除了 .bat 文件),获取其修改日期,并根据月份确定上半年和下半年分类?怎么分类
如果遇到同名文件,会为其添加一个递增的数字后缀以确保文件名的唯一性,
删除所有空目录

TOP

本帖最后由 zhengzhenhui 于 2024-7-25 22:36 编辑

我先试的是,先提取目录下的文件,做同名按数字递增重命名,然后再获取文件修改日期做为分类,又试了一下先遍历所以文件,有同名按数字递增重命名,然后再获取文件修改日期做为分类,

TOP

回复 6# 77七


    就是不会,才写自己凑半拉子交给ai来凑的,然后扣上面的字眼流程学习去印证的,论坛里面我是先搜了没有搜到,每个人学习的方法不一样,你要这样理解我也无话可说。

TOP

回复 5# zhengzhenhui


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

   如果想学习bat,先打好基础...没必要盯着ai写的垃圾代码,研究它哪里错了。
bat小白,请多指教!谢谢!

TOP

回复 4# 77七


    搜索过了论坛应该是关键词没查询到位,我再找找 ,俩段分开可以用,拼一起就不行,主要是想了解是中间哪里出问题了

TOP

ai写的错误代码,还这么长,没人愿意读80多行的ai错误代码,直接重新写反而更省事。
像移动文件重名添加序号,此类问题论坛内有很多相同帖子,没必要事事求助ai而忽视论坛吧?
bat小白,请多指教!谢谢!

TOP

回复 2# qixiaobin0715


    上半年和下半年那个单独拎出来处理没有问题的,就是提取根目录,并处理同名文件按数字排序,再删除空文件夹这段代码加进去整个都运行不了

TOP

别的地方未看,代码第46--70行可简化为:
  1. if "!Month!" leq "06" (set "Season=上半年") else set "Season=下半年"
复制代码

TOP

返回列表