标题: [文件操作] 批处理压缩、删除多级、多个目录的日志 [打印本页]
作者: 浪笑流尘 时间: 2013-9-20 15:03 标题: 批处理压缩、删除多级、多个目录的日志
本帖最后由 浪笑流尘 于 2013-9-20 15:05 编辑
情况如下:
1、现公司有多台应用服务器,每天产生大量日志(大约50-80GB)公布在不同的文件夹中,要手动压缩并删除。着实很累,一晚上压日志就够玩了,于了决定用批处理解决。
2、日志文件夹分布(各应用目录者类似)
log_path-------------------日志根目录
│
├-App1 ------------------应用1目录
│ │
│ ├--service------------服务日志目录(先暂时不考虑)
│ │
│ ├--aaa-----------------日志目录
│ |
│ ├--aaa.20130920_01.1.log----------------按时间及序号排列的日志文件
│ |
│ ├--aaa.20130920_01.2.log----------------按时间及序号排列的日志文件
│ |
│ ├--aaa.20130920_02.1.log----------------按时间及序号排列的日志文件
........
│ ├--aaa.20130919.zip--------------------压缩后的日志 (要压缩今天以前的日志并将原文件删除)
├-App2
问题:
1、以下是我写的代码,测试执行时,没有压缩测试文件夹中内容,也没有生成桌面日志。
2、如果将压缩部分写成子程序该如何写,我对子程序的参数传递不太熟。
3、执行效率,我在测试时压缩一个200MB的文件CPU占用80%多,服务器第次压缩的日志有10G,那cpu占用还得了,
4、请各位网友帮忙分析下,对代码部分帮忙指正,先在些谢过!!!- echo off
- ::%windir%=c:\windows
- set programe_path=%windir%\winrar.exe
- set log_path=h:\log
- set /a yesterday=%date:~0,4%%date:~5,2%%date:~8,2%-1
- set today=%date:~0,4%%date:~5,2%%date:~8,2%
- set file_format=zip
- set sleep_time=60
- pushd %log_path%
- for /f %%f in ('dir/ad/b') do (
- set para_dir=%%f
- pushd %%f
- echo [%today% %time:~0,2%:%time:~3,2%:%time:~6,2%] start compress logs in %para_dir% >>%userprofile%\desktop\Taskschd_compress.log
- for /f %%d in ('dir/a-d/b|findstr /i /v .*%file_format%) do (
- for /f "tokens=2 delims=._" %%D in ("%%d") do (
- if %%D lss %today% (
- ::Use Winrar.exe(support ZIP、RAR、7z etc.)
- %programe_path% A -df -y -ibck -w%cd% -inul -ilog%userprofile%\desktop\Taskschd_compress.log %para_dir%.%yesterday%.%file_format% %%d
- ::Use rar.exe(only support RAR)
- ::%programe_path% A -df -y -w%cd% -inul -ilog%userprofile%\desktop\Taskschd_compress.log %para_dir%.%filename% %%d
- echo [%today% %time:~0,2%:%time:~3,2%:%time:~6,2%] ----compress %%d into %para_dir%.%yesterday%.%file_format% successfully! >>%userprofile%\desktop\Taskschd_compress.log
- )
- )
- )
- echo [%today% %time:~0,2%:%time:~3,2%:%time:~6,2%] compress logs into %para_dir% successfully!>>%userprofile%\desktop\Taskschd_compress.log
- popd
-
- REM ::sleep
- REM echo Wscript.Sleep Wscript.Arguments(0) * 1000 >%systemroot%\temp\Delay.vbs
- REM "%SystemRoot%\System32\WScript.exe" %systemroot%\temp\Delay.vbs %sleep_time%
- REM del %systemroot%\temp\Delay.vbs
-
- REM ::exit execute,and exit form commandline,only for test!!!
- REM goto :eof
- )
- popd
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |