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

[文本处理] [已解决]批处理 备份前一天的日志

本帖最后由 yang1109 于 2012-6-1 13:54 编辑

各们大虾们 我是一菜鸟 帮个忙 
我想每天下午四点半定时压缩前一天生成的log文件 但是每天生成的log文件有多个 并把压缩的.zar文件放在log文件的上级目录中 压缩的路劲为:
例如 D:\hi\log\*20120531*.log 成生在D:\hi下 20120531.rar (压缩的文件名也为前一天的日期) 

比如今天是2012.06.01号 前一天生成的日志有*20120531*.log  *20120531*.sec  *20120531*.per  *20120531*.txt 等 我想把压缩的文件名为20120531.rar   注意每在生成的日志文件名里面有前一天日期 但是日期有时前后会的别的字符 如:request_20120531null.log
   十分感谢各位的帮助,谢谢
1

评分人数

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

本帖最后由 neorobin 于 2012-6-1 12:50 编辑

将下面代码保存为批处理文件, 然后在 计划任务中 加入这个批处理文件的任务, 每天 16:30 执行一次
  1. @echo off & setlocal enabledelayedexpansion
  2. set "workDir=D:\hi" & rem 工作目录路径, 路径不要用双引号括起
  3. set rar="%ProgramFiles%\WINRAR\rar.exe"& rem winrar 控制台版本的路径, 若非如此, 请作修改
  4. call :yesterday yesterday
  5. cd /d "%workDir%"
  6. %rar% a %yesterday%.rar "log\*%yesterday%*.*"
  7. exit
  8. :yesterday
  9. for /f "tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate^|find/i"sSh"') do (
  10.   >nul reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /d "yyyyMMdd" /f
  11.   set /a "y=!date:~0,4!,m=1!date:~4,2!-100,d=1!date:~-2!-101"
  12.   setlocal disabledelayedexpansion
  13.   set /a "m-=!d,y-=!m,d+=!d*(31-(!(m-4)|!(m-6)|!(m-9)|!(m-11))-!(m-2)*(3-(!(y%%4)&!!(y%%100)|!(y%%400)))),m+=!m*12"
  14.   set /a "m+=100,d+=100"
  15.   >nul reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /d "%%~b" /f
  16. )
  17. endlocal & set "%1=%y%%m:~-2%%d:~-2%" & exit /b
复制代码
1

评分人数

TOP

回复 2# neorobin


    高人呀 你这个还没有达到我想要的效果呀 这个只能打包文件名为20120531日期的数据 如果在文件名里面在加点request_20120531_112.log就不行  这个包就被忽略了 还忘高人在指点呀

TOP

回复 3# yang1109

测试过可以的, 代码中的通配形式, 就是你要求的   *%yesterday%*.*

TOP

回复 4# neorobin


    嗯  我刚又看了下 刚刚 *%yesterday%*.* 前面我打成?去了 高人 谢了哈 非常感谢

TOP

回复 5# yang1109


    对了 我觉得这个好复杂哟 能不能在这个程序上改下 我自已也成了 但不成功
@echo off
set "i=%date:~,4%%date:~5,2%%date:~8,2%"
set  "d=i-1"
pushd "d:\hi\log"
"%programfiles%\winrar\rar.exe" a -o+ -ep "..\%d%.rar" "%d%.*"

pause

TOP

本帖最后由 neorobin 于 2012-6-1 14:01 编辑

回复 6# yang1109

纯粹依靠 cmd 来计算昨天的日期, 没有简单的代码,  子程序采用了 注册表 读取和设置 日期格式 的方式, 确实显繁琐了, 好处是适应各种原始的日期格式, 而 你示出的代码是要求工作在特定的日期格式条件下的

  set /a "y=!date:~0,4!,m=1!date:~4,2!-100,d=1!date:~-2!-101"
  set /a "m-=!d,y-=!m,d+=!d*(31-(!(m-4)|!(m-6)|!(m-9)|!(m-11))-!(m-2)*(3-(!(y%%4)&!!(y%%100)|!(y%%400)))),m+=!m*12"

这里的算法: 日数减1, 如果成了0, 月数减1, 如果月数成了0, 年数减1; 如果日数成了0, 根据当前年月(大小月, 2月的平闰情况)确定日数, 如果月数成了0, 变成12, 否则不变

TOP

回复 7# neorobin


    哦 学到了 高人谢了

TOP

返回列表