高效日志分离器:一键筛选关键信息

日志分离器

核心的bat脚本语法

复制代码
 @echo off      
setlocal enabledelayedexpansion      
:: 设置控制台编码为 65001 (UTF-8)      
set UCODE=65001      
chcp %UCODE% >nul
   
:: ===================================================   
:: 配置参数         
set "dir_source=de_compress"     
set "dir_result=de_result"
   
set "zip_pattern=main_log*.zip"

   
set "file_merged=%dir_result%\de_result1_merged.txt"      
set "file_result=%dir_result%\de_result2_file.txt"      
set "file_drafta=%dir_result%\de_result3_draftA.txt"      
set "file_draftb=%dir_result%\de_result4_draftB.txt"  
   
set "temp_list=file_list.tmp"


   
:: 筛选日志的两个关键字   
set "word_one=sentry"      
set "word_two=CarService"
   
:: ===================================================
   
:menu   
   
:: 创建目标目录(若不存在)         
if not exist "%dir_source%" mkdir "%dir_source%"   
:: 创建目标目录(若不存在)         
if not exist "%dir_result%" mkdir "%dir_result%"
   
title  日志筛选器   
echo.      
echo =============== 请选择要执行的操作 ===============      
echo ---------------     1. 处理特殊文件    -----------   
echo ---------------     2. 解压 zip 文件   -----------   
echo ---------------     3. 合并文本文件    -----------   
echo ---------------     4. 筛选关键词      -----------   
echo ---------------     5. 生成草稿文本    -----------   
echo ---------------     6. 退出脚本        -----------   
echo.      
set /p choice="请输入数字 (1-6): "   
echo. 
   
if "%choice%"=="1" goto programCalibration      
if "%choice%"=="2" goto programDecompress      
if "%choice%"=="3" goto programMerge      
if "%choice%"=="4" goto programFilter      
if "%choice%"=="5" goto programDraft      
if "%choice%"=="6" goto programExit    
echo 无效的输入,请重新输入      
goto menu




   
:programCalibration   
   
echo 文件处理任务启动...      
echo -----------------------------------
   
:: 初始化计数器      
set renamedCount=0      
set zippedCount=0      
set errorCount=0
   
:: 第一阶段:处理包含main_log但非main_log开头的非zip文件      
echo 正在处理重命名任务...      
for /f "delims=" %%F in ('dir /b *main_log* 2^>nul ^| findstr /i /v /b "main_log"') do (
    if /i not "%%~xF"==".zip" (
        set "filename=%%F"
        set "newname=main_log!filename:*main_log=!"
        
        echo [重命名] !filename! → !newname!
        ren "!filename!" "!newname!" 2>nul && (
            set /a renamedCount+=1
        ) || (
            set /a errorCount+=1
            echo [!] 重命名失败: !filename!
        )
    )      
)
   
:: 第二阶段:压缩main_log开头且非zip的文件      
echo -----------------------------------      
echo 正在处理压缩任务...      
for /f "delims=" %%F in ('dir /b main_log* 2^>nul ^| findstr /i /v "\.zip$"') do (
    set "zipName=%%~nF.zip"
    echo [压缩中] %%F → !zipName!
    
    :: 使用Windows内置压缩功能
    powershell -nologo -noprofile -command "$ErrorActionPreference='Stop';Compress-Archive -LiteralPath '%%F' -DestinationPath '!zipName!' -Force" 2>nul && (
        del "%%F" 2>nul && (
            set /a zippedCount+=1
        ) || (
            set /a errorCount+=1
            echo [!] 无法删除原文件: %%F
        )
    ) || (
        set /a errorCount+=1
        echo [!] 压缩失败: %%F
    )      
)
   
:: 结果报告      
echo -----------------------------------      
echo 任务完成报告:      
echo 成功重命名文件: %renamedCount%      
echo 成功压缩文件  : %zippedCount%      
echo 失败操作次数  : %errorCount%      
echo -----------------------------------      
if %errorCount% gtr 0 (
    echo 注意:部分操作失败可能原因:
    echo 1. 文件被占用
    echo 2. 权限不足
    echo 3. 文件名包含非法字符
    echo 4. 磁盘空间不足          
)       
   
echo.     
echo.     
goto menu




   
:programDecompress   
   
:: 清空目标目录(可选,避免文件覆盖冲突)         
del /q "%dir_source%\*" 2>nul
   
:: 方法1:优先使用Windows内置tar命令(Win10 1809+)         
where tar >nul 2>&1         
if %errorlevel% equ 0 (
    echo [使用系统tar命令解压]
    for %%F in (%zip_pattern%) do (
        echo 正在解压: %%F
        tar -xf "%%F" -C "%dir_source%" 2>nul && (
            echo ✓ 成功
        ) || (
            echo ✗ 失败(可能文件损坏)
        )
    )         
) else (
    echo 系统未找到 tar 命令,请确保使用 Windows 10 1809 或更高版本      
)
   
:: 结果摘要         
echo.         
echo ---------------     解压结果   -----------   
dir /b "%dir_source%" | find /c /v "" >nul && (
    for /f %%A in ('dir /b "%dir_source%" ^| find /c /v ""') do (
        echo 解压文件总数: %%A
    )      
) || echo 没有文件被解压!
   
echo 文件以及解压完毕, 保存在 %dir_source% 文件夹中   
echo.     
echo.     
goto menu
   
:programMerge   

   
:: 检查源目录是否存在      
if not exist "%dir_source%" (
    echo 错误:源目录 "%dir_source%" 不存在
    echo 请先执行选项1解压文件
    pause
    goto menu      
)
   
:: 生成按名称排序的文件列表(升序)      
dir /b /on "%dir_source%\*" > "%temp_list%"
   
:: 清空或创建输出文件      
type nul > "%file_merged%"
   
:: 合并文件内容      
set file_count=0      
for /f "usebackq delims=" %%F in ("%temp_list%") do (
    echo [正在合并] %%F
    type "%dir_source%\%%F" >> "%file_merged%"
    set /a file_count+=1
    
    :: 添加文件分隔标记(可选)
    echo. >> "%file_merged%"
    echo ===== End of: %%F ===== >> "%file_merged%"
    echo. >> "%file_merged%"      
)
   
:: 清理临时文件      
del "%temp_list%"
   
:: 获取输出文件大小      
for %%F in ("%file_merged%") do set output_size=%%~zF
   
:: 结果报告      
echo.      
echo ---------------     合并完成   -----------   
echo 输入文件数: %file_count%      
echo 输出文件: %file_merged%      
echo 文件大小: %output_size% bytes      
echo.      
echo.   
goto menu
   
:programFilter      
:: 检查合并文件是否存在      
if not exist "%file_merged%" (
    echo 错误:%file_merged% 文件不存在
    echo 请先执行选项3合并文件
    pause
    goto menu      
)
   

echo ---------------     准备筛选   -----------   
echo 开始筛选内容, 包含有 %word_one% %word_two%   
findstr /i "%word_one% %word_two%" "%file_merged%" > "%file_result%"   
echo 筛选完成,结果已保存到 %file_result%   
echo.   
echo.   
goto menu

   
:programDraft   
echo ---------------     生成草稿文本   -----------   
echo 正在生成草稿文本, 文件有 %file_drafta%  和 %file_draftb%   
del "%file_drafta%" 2>nul   
del "%file_draftb%" 2>nul   
echo. >> "%file_drafta%"   
echo. >> "%file_draftb%"   
echo.   
echo 草稿生成完成   
echo.   
echo.   
goto menu

   
:programExit    
echo ---------------     即将退出   -----------   
timeout /t 2 /nobreak >nul   
goto exit   
   
:end      
endlocal

运行效果

创建的文件和文件夹

相关推荐
星竹晨L28 分钟前
C++红黑树:理论与实践相结合的平衡艺术
开发语言·数据结构·c++
itwangyang52029 分钟前
在 GitHub 上生成和配置个人访问令牌(PAT),并将其用于 R 环境中的凭证管理和包安装。
开发语言·r语言·github
7***998733 分钟前
Redis——Windows安装
数据库·windows·redis
宠..33 分钟前
创建文本框控件
linux·运维·服务器·开发语言·qt
Sally_xy35 分钟前
安装 Java
java·开发语言
湫兮之风36 分钟前
C++: 一文掌握std::vector::assign函数
开发语言·c++
南玖i38 分钟前
vue2/html 实现高德点聚合
开发语言·ios·swift
飞梦工作室39 分钟前
PHP 中 php://input 的全面使用指南
android·开发语言·php
第二只羽毛40 分钟前
订餐系统的代码实现
java·大数据·开发语言