MakeCAB命令的一些用法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Windows日志每满1G存档一次,且要求保留半年以上,由于日志存档文件每天都会生成超过10个G以上的日志存档文件,服务器本身没有那么大的空间可以用作存储,唯有把日志存档文件压缩后存放。日志存档文件多且大,不可能每天都登录服务器去手动压缩,为此,查找了很多资料,瞄上的Windows自带的压缩工具Makecab。

一、MakeCAB基本用法

Cabinet Maker - Lossless Data Compression Tool

MAKECAB [/V[n]] [/D var=value …] [/L dir] source [destination]
MAKECAB [/V[n]] [/D var=value …] /F directive_file […]

source File to compress.
destination File name to give compressed file. If omitted, the
last character of the source file name is replaced
with an underscore (_) and used as the destination.
/F directives A file with MakeCAB directives (may be repeated). Refer to
Microsoft Cabinet SDK for information on directive_file.
/D var=value Defines variable with specified value.
/L dir Location to place destination (default is current directory).
/V[n] Verbosity level (1…3).

makecab 压缩单个文件用法:
makecab 源文件名 目标文件名,譬如:
makecab a.doc a.cab #把a.doc压缩为a.cab,makecab支持压缩成zip、rar、cab,个人建议用cab,因为这个格式支持双击打开,其它格式需要用expand命令或其它解压工具。

二、批量压缩多个文件,使用原来的文件名保存到另一个目录

#生成一个存档日志文件的列表文本文件:

Set Evt_Path=C:\Windows\System32\winevt
Dir /b %Evt_Path%\Logs\Archive*.evtx >%Evt_Path%\Archive-list.txt

#在日志文件的默认目录操作需要管理员权限。

For /F %%i in (Archive-list.txt) do MAKECAB /D maxdisksize=2147483648 /D compressiontype=LZX %Evt_Path%\Logs\\%%i %%i.cab /L %Evt_Path%\Archive\

#For命令遍历文本列表的每个文件名,然后调用makecab进行压缩
#/D maxdisksize,makecab默认压缩大小为1424KB,而最大大小应该是2G(2147483648)
#/D compressiontype,压缩类型,有:none、 mszip、 lzx,压缩比例最大为lzx,1G的日志存档文件可以压缩到30m左右,而mszip则大一倍,当然lzx类型需要压缩的时间也最长,需要超过45分钟,而mszip则20分钟左右,这个自行评估选择。
#%Evt_Path%\Logs\%%i ,源文件
#%%i.cab ,目标文件名,并使用源文件名(带原后缀)重命名,后缀可用zip或其它
#/L %Evt_Path%\Archive\ ,目标文件夹

三、自己修改又修改后的脚本

@echo off
Set Evt_Path=D:\Windows\System32\winevt
::导航到存档日志文件夹Logs
D:
CD %Evt_Path%\

Echo. >>%Evt_Path%\History.txt
Echo %date%,%time%,开始执行压缩任务 >>%Evt_Path%\History.txt

Echo 生成当前存档日志文件的待压缩列表,以下存档文件将被压缩:
Dir /b %Evt_Path%\Logs\Archive*.evtx >%Evt_Path%\Archive-list.txt
Type %Evt_Path%\Archive-list.txt

Echo.
Echo 存档日志压缩后保存到文件夹Archive,存档日志压缩处理中...
For /F %%i in (Archive-list.txt) do MAKECAB /D maxdisksize=2147483648 /D compressiontype=MSZIP %Evt_Path%\Logs\%%i %%i.cab /L %Evt_Path%\Archive\

IF %ERRORLEVEL% NEQ 0 goto Failed

:Succeed
Echo %date%,%time%,压缩任务执行成功,以下已压缩的存档文件被清理:>>%Evt_Path%\History.txt
For /F %%i in (Archive-list.txt) do Del /f /s /q %Evt_Path%\Logs\%%i >>%Evt_Path%\History.txt
goto Exit

:Failed
Echo %date%,%time%,无新的存档日志文件或压缩执行失败,无存档文件被清理。>>%Evt_Path%\History.txt
goto Exit
:Exit

效果:
2024/03/04 周一, 0:00:01.62,开始执行压缩任务
2024/03/04 周一, 0:42:43.84,压缩任务执行成功,以下已压缩的存档文件被清理:
删除文件 - D:\Windows\System32\winevt\Logs\Archive-Security-2024-03-03-14-07-25-017.evtx
删除文件 - D:\Windows\System32\winevt\Logs\Archive-Security-2024-03-03-15-10-06-191.evtx

四、补充一个powershell的脚本:

$ArchivePath = "C:\Windows\System32\winevt"
$files = Get-ChildItem  "$ArchivePath\Logs\Archive*.evtx"
foreach ($file in $files){
	 Compress-Archive $file.FullName "$ArchivePath\Archive\$($file.Name).zip"
}

因为Compress-Archive只有Powershell 5以上才有的命令,so此脚本适合power shell 5以上的系统,Server 2012 R2及以下系统需要先升级Poweshell(需要重启)。

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值