Board logo

标题: [文件操作] 批处理怎样根据文件的创建日期和天数移动到指定文件夹? [打印本页]

作者: wcmgood    时间: 2010-7-13 13:58     标题: 批处理怎样根据文件的创建日期和天数移动到指定文件夹?

比如 把创建日期和当前日期大于30天的文件,根据文件的创建日期,移动到指定的文件夹下
文件名          创建日期
LSJW26H001     2010-04-01
LSJW26H002     2010-04-01
LSJW26H003     2010-05-02
LSJW26H004     2010-05-02
LSJW26H005     2010-06-01
LSJW26H007     2010-07-11

自动生成文件夹 201004 包含文件  LSJW26H001     LSJW26H002   
自动生成文件夹 201005包含文件  LSJW26H003     LSJW26H004     
自动生成文件夹 201006 包含文件 LSJW26H005     
LSJW26H007 不用转移
作者: wcmgood    时间: 2010-7-13 13:58

我不懂代码,请各位直接给出代码 谢谢
作者: Batcher    时间: 2010-7-13 23:10

有没有兴趣学学基础,争取看懂代码呢?
作者: renmingwu    时间: 2010-7-14 08:42

第三方命令行工具forfiles可以很好的完成这个任务,基础的还是要学下的。
作者: wcmgood    时间: 2010-7-14 08:52

兄弟们,不如自己给个代码吧,因为这个东东平时用的很少,没有去关注过,谢谢各位了,周五就要用的
作者: wcmgood    时间: 2010-8-6 21:38

有没有兄弟给段代码啊,或者给个提示 给个方向
作者: broly    时间: 2010-8-6 22:04

给出文件后缀,这样方便写代码
作者: broly    时间: 2010-8-6 22:05

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /a-d-h /b') do (
  3. set folder=%%~ti
  4. set folder=!folder:~0,4!!folder:~5,2!
  5. if not "!folder!"=="201007" md !folder! 2>nul
  6. move "%%i" !folder!
  7. )
  8. pause
复制代码

作者: wcmgood    时间: 2010-8-6 22:24

文件后缀是 jpg文件 谢谢
作者: wcmgood    时间: 2010-8-6 22:28

Broly兄
     你的方法基本正确的,能详细解释一下每一行的参数作用吗?正好学习学习,一旦日后更改,也好自己动手做
作者: broly    时间: 2010-8-6 23:28

  1. @echo off&setlocal enabledelayedexpansion
  2. rem 将每一个文件按顺序赋值给%%i
  3. for /f "delims=" %%i in ('dir /a-d-h /b') do (
  4. rem 将文件的日期赋值给变量folder,格式为2010-04-01
  5. set folder=%%~ti
  6. rem 截取,将格式变为如201004
  7. set folder=!folder:~0,4!!folder:~5,2!
  8. rem 如果名字不为201007,就按这个名字建立文件夹
  9. if not "!folder!"=="201007" md !folder! 2>nul
  10. rem 移动文件到建立的那个文件夹
  11. move "%%i" !folder!
  12. )
  13. pause
复制代码

作者: broly    时间: 2010-8-6 23:42

如果知道具体的数据情况,可以写一个更好的
作者: wcmgood    时间: 2010-8-8 21:00

谢谢,问题解决
作者: wngfei    时间: 2010-12-8 14:07     标题: 请教Broly具体细节

若是我的原文件在C:\jjye下,而目标文件夹是w:\jjye,代码应该怎样写,多谢。
作者: hanyeguxing    时间: 2010-12-8 16:54

说明:
set "l0=C:\jjye"    源路径
set "l1=w:\jjye"    目标路径
call,30              这里的30指30天前
  1. @echo off&setlocal enabledelayedexpansion
  2. set "l0=C:\jjye"
  3. set "l1=w:\jjye"
  4. call:D,30
  5. for /f "delims=" %%a in ('dir /a:-d/b "%l0%"') do (
  6.     set t=%%~ta
  7.     set t=!t:-=!
  8.     if not "!t:~0,8!" lss "%D%" (
  9.         if not exist "%l1%\!t:~,06!\" md "%l1%\!t:~,06!"
  10.         move "%%a" %l1%\!t:~,06!
  11. ))
  12. exit
  13. :D
  14. for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set Y=%%a&set M=%%b&set D=%%c
  15. if "%M:~0,1%"=="0" set M=%M:~1%
  16. if "%D:~0,1%"=="0" set D=%D:~1%
  17. set/a D-=%1
  18. if %D% gtr 0 goto:Y
  19. :M
  20. set/a M-=1
  21. if !M!==0 set/a Y-=1,M=12
  22. set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31+D"
  23. if %D% leq 0 goto:M
  24. :Y
  25. set M=0%M%&set D=0%D%&set D=%Y%!M:~-2!!D:~-2!
复制代码

作者: wngfei    时间: 2010-12-10 15:56

多谢寒夜孤星,是学到不少东西。孤星应该是启明星,呵呵。
作者: jijo    时间: 2010-12-29 17:16

好办法,收藏了!
基本解决了我目前的困扰!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2