
批處理壓縮刪除多級多個目錄的日志最后由 浪笑流塵 于 -9-20 15:05情況如下:1、現公司有多臺應用服務器,每天產生大量日志(大約50-80GB)公布在不同的文件夾中,要手動壓縮并刪除。著實很累,一晚上壓日志就夠玩了,于了決定用批處理解決。2、日志文件夾分布(各應用目錄者類似) log_path-------------------日志根目錄│├-App1 ------------------應用1目錄│ ││ ├--service------------服務日志目錄(先暫時不考慮)│ ││ ├--aaa-----------------日志目錄│ |│ ├--aaa.0920_01.1.log----------------按時間及序號排列的日志文件│ |│ ├--aaa.0920_01.2.log----------------按時間及序號排列的日志文件│ |│ ├--aaa.0920_02.1.log----------------按時間及序號排列的日志文件........│ ├--aaa.0919.zip--------------------壓縮后的日志 (要壓縮今天以前的日志并將原文件刪除)├-App2問題:1、以下是我寫的代碼,測試執行時,沒有壓縮測試文件夾中內容,也沒有生成桌面日志。2、如果將壓縮部分寫成子程序該如何寫,我對子程序的參數傳遞不太熟。3、執行效率,我在測試時壓縮一個200MB的文件CPU占用80%多,服務器第次壓縮的日志有10G,那cpu占用還得了,4、請各位網友幫忙分析下,對代碼部分幫忙指正,先在些謝過!!!
nclick="copycode($('code0'));">復制代碼
- 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%desktopTaskschd_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%desktopTaskschd_compress.log%para_dir%.%yesterday%.%file_format% %%d
- ::Use rar.exe(onlysupport RAR)
- ::%programe_path% A -df -y-w%cd% -inul-ilog%userprofile%desktopTaskschd_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%desktopTaskschd_compress.log
- )
- )
- )
- echo [%today% %time:~0,2%:%time:~3,2%:%time:~6,2%] compress logs into %para_dir% successfully!>>%userprofile%desktopTaskschd_compress.log
- popd
- REM ::sleep
- REM echo Wscript.Sleep Wscript.Arguments(0) * 1000 >%systemroot%tempDelay.vbs
- REM %SystemRoot%System32Wscript.exe %systemroot%tempDelay.vbs %sleep_time%
- REM del %systemroot%tempDelay.vbs
- REM ::exit execute,and exit form commandline,only for test!!!
- REM goto :eof
- )
- popd

