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

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

[复制链接]
发表于 2012-6-1 10:41:25 | 显示全部楼层 |阅读模式
本帖最后由 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
   十分感谢各位的帮助,谢谢

评分

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

查看全部评分

发表于 2012-6-1 12:25:46 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-6-1 13:30:35 | 显示全部楼层
回复 2# neorobin


    高人呀 你这个还没有达到我想要的效果呀 这个只能打包文件名为20120531日期的数据 如果在文件名里面在加点request_20120531_112.log就不行  这个包就被忽略了 还忘高人在指点呀
发表于 2012-6-1 13:42:33 | 显示全部楼层
回复 3# yang1109

测试过可以的, 代码中的通配形式, 就是你要求的   *%yesterday%*.*
 楼主| 发表于 2012-6-1 13:50:10 | 显示全部楼层
回复 4# neorobin


    嗯  我刚又看了下 刚刚 *%yesterday%*.* 前面我打成?去了 高人 谢了哈 非常感谢
 楼主| 发表于 2012-6-1 13:52:24 | 显示全部楼层
回复 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
发表于 2012-6-1 13:58:27 | 显示全部楼层
本帖最后由 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, 否则不变
 楼主| 发表于 2012-6-1 15:07:55 | 显示全部楼层
回复 7# neorobin


    哦 学到了 高人谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 04:57 , Processed in 0.020379 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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