Board logo

标题: [文件操作] 批处理怎样每天按时把一个文件夹的文件移动到另一文件夹? [打印本页]

作者: zxiang1231    时间: 2011-6-15 16:45     标题: 批处理怎样每天按时把一个文件夹的文件移动到另一文件夹?

请教下怎么写命令能每天定时把一个文件夹内的文件复制到另一个文件夹内(不同的分区),并且按日期创建文件夹。并设定一个时期内能删除之前的文件夹?
我之前写的简单的
Xcopy e:\www1 g:\web /e/y/r
Xcopy e:\hd g:\web\hd /e/y/r
只能复制一次 还不能按日期生成 。。
作者: common    时间: 2011-6-15 20:04

我能想到的:
at 9:00 /every:m,t,w.th.s,su,f Xcopy e:\www1 g:\web /e/y/r
at 9:00 /every:m,t,w.th.s,su,f Xcopy e:\hd g:\web\hd /e/y/r
作者: mxxcgzxxx    时间: 2011-6-15 22:49

用AT是个好办法,但会有一个小缺点,那就是过了时间才开机就作废了。
还需要一个补充命令,开机运行的,如果开机时间超过九点则检测当日目录是否存在,有则不运行,无则执行命令。
作者: zxiang1231    时间: 2011-6-16 17:50

那可否把这个 任务 加到window带的 计划任务内 时间由计划任务里的时间去控制呢?
作者: zxiang1231    时间: 2011-6-21 14:58

本帖最后由 zxiang1231 于 2011-6-21 15:00 编辑

怎么写,能让操作会按照每天的日期把拷贝的东西建包,并且能在一定时间内删除之前,拷贝的文件夹呢?
作者: cxmzlxb    时间: 2011-6-21 17:34

我提供一个思路:
用AT 添加一个定时任务  (缺点,在这个时间之后开机就不能生效)
用XCOPY 命令 备份
文件夹的生成如果用日期形式,可以用时间变量,如 %date:~0,10%  这样生成年月日 这样的文件夹,如2011-06-21  
删除,这个首先要将日期的变量转成一个数值型,再进行计算,最后再转成日期形,判断之后再用RD 来删除目录即可!
作者: cxmzlxb    时间: 2011-6-21 17:37

本帖最后由 cxmzlxb 于 2011-6-24 12:41 编辑
  1. @echo off
  2. :start
  3. setlocal&cls
  4. set /p tian=      请指定要追溯的天数:&echo\
  5. call :Date2Day "%date%" %tian% ok
  6. echo       %ok%
  7. endlocal&pause>nul&goto start
  8. :Date2Day 计算指定天数 前/后 的日期及星期 (封装)
  9. @echo off&setlocal ENABLEEXTENSIONS
  10. for /f "tokens=1-3 delims=/-:\, " %%a in ('echo/%~1') do (
  11. set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%100)
  12. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  13. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  14. set /a i=j-%~2,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  15. set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
  16. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  17. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  18. for %%a in (一/1 二/2 三/3 四/4 五/5 六/6 日/0) do (
  19. for /f "tokens=1,2 delims=/" %%i in ("%%a")do set %%i=%%j&set ".%%j=%%i")
  20. if %~2 gtr 0 (set /a d=^(7-%~2%%7+%date:~-1%^)%%7&set x=前) else (
  21. set /a d=^(~%~2+1+%date:~-1%^)%%7&set x=后)
  22. call set "d=星期%%.%d%%%"
  23. endlocal&set %~3=%yy%-%mm%-%dd% %d%&goto :EOF
复制代码
这段代码可以做时间差,从而来得出删出时间,现成的!
作者: BS0小陈    时间: 2011-6-21 18:41

今天刚学的schtasks可能可以,代码嘛 我不会写请高人吧




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