You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

需求:用Windows原生tar每周一归档上周一至周日的日志文件

上周日志自动压缩归档的Windows批处理实现

问题背景

需要每周一自动执行脚本,将上周一至周日的.log日志文件压缩为ZIP包,并移动到指定归档文件夹。仅能使用Windows原生命令(无第三方压缩工具),现有脚本无法筛选目标日期范围的文件。

现有基础脚本:

@echo off

set "srcFolder=D:\Data\Logs\*.log"
set "archFile=ETLDataLogs.zip"

tar.exe acvf "%archFile%" "%srcFolder%"

解决方案

核心思路:通过PowerShell计算上周的日期范围,用forfiles筛选符合日期的日志文件,再传递给tar命令压缩,最后完成归档移动。

完整批处理脚本

@echo off
setlocal enabledelayedexpansion

:: 自定义路径配置
set "logFolder=D:\Data\Logs"          :: 日志文件所在目录
set "archFolder=D:\Data\Archive"      :: 归档文件夹路径
set "archFile=ETLDataLogs_!date:~0,4!!date:~5,2!!date:~8,2!.zip"  :: 带日期的压缩包名称

:: 用PowerShell计算上周一、上周日的日期(格式适配forfiles:MM/dd/yyyy)
for /f "delims=" %%a in ('powershell -Command "$lastMonday = (Get-Date).AddDays(-(Get-Date).DayOfWeek.value__ - 6); $lastSunday = (Get-Date).AddDays(-(Get-Date).DayOfWeek.value__); '{0:MM/dd/yyyy}|{1:MM/dd/yyyy}' -f $lastMonday, $lastSunday"') do (
    set "dateRange=%%a"
)

:: 拆分日期范围变量
set "lastMonday=!dateRange:^|=!"
set "lastSunday=!dateRange:*|=!"

:: 筛选上周范围内的日志文件,写入临时列表
forfiles /p "%logFolder%" /m *.log /d +"!lastMonday!" /d -"!lastSunday!" /c "cmd /c echo @path" > "%temp%\logfiles.txt"

:: 检查是否存在目标文件
if not exist "%temp%\logfiles.txt" (
    echo 未找到上周的日志文件
    goto :eof
)

:: 调用tar压缩指定文件列表
tar.exe acvf "%archFile%" --files-from="%temp%\logfiles.txt"

:: 归档压缩包(自动创建归档文件夹)
if not exist "%archFolder%" mkdir "%archFolder%"
move /y "%archFile%" "%archFolder%\"

:: 清理临时文件
del "%temp%\logfiles.txt"

echo 上周日志归档完成
endlocal

关键说明

  1. 日期计算逻辑:
    借助PowerShell获取当前日期的星期值(0=周日,6=周六),每周一执行时,通过AddDays计算出上周一(当前日期减7天再加1天)和上周日(当前日期减1天),确保覆盖完整的上周周期。
  2. 文件筛选:
    使用forfiles命令的/d +(大于等于指定日期)和/d -(小于等于指定日期)参数,精准筛选上周日志,并将文件路径写入临时列表。
  3. tar压缩优化:
    通过--files-from参数读取临时文件列表,避免压缩无关文件;压缩包名称加入执行当天的日期,防止覆盖历史归档。
  4. 自动归档:
    自动检查并创建归档文件夹,完成压缩包的移动操作,最后清理临时文件。

注意事项

  • 确保系统支持PowerShell(Windows 7及以上默认预装)。
  • 若系统日期格式为dd/MM/yyyy,需修改PowerShell命令中的格式字符串为{0:dd/MM/yyyy}|{1:dd/MM/yyyy},否则forfiles无法正确识别日期。
  • 测试阶段可将tar.exe命令替换为echo tar.exe,先验证目标文件列表是否正确。

内容的提问来源于stack exchange,提问作者Naveen Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:03:22