欢迎光临百色市聚强科技
详情描述

1. 基础批处理脚本

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

title 批量解压及文件合并工具
color 0A

echo =========================================
echo     批量解压及文件合并工具
echo =========================================
echo.

REM 设置工作目录(当前目录)
set "workdir=%~dp0"
echo 工作目录: %workdir%
echo.

REM 创建输出目录
set "outputdir=%workdir%合并结果"
if not exist "%outputdir%" mkdir "%outputdir%"

REM 支持的压缩格式
echo 支持的压缩格式: .zip, .rar, .7z
echo.

REM 解压工具检查
where 7z >nul 2>nul
if errorlevel 1 (
    echo 错误: 未找到 7-Zip,请安装后重试!
    echo 下载地址: https://www.7-zip.org/
    pause
    exit /b 1
)

echo 正在搜索压缩文件...
echo.

set filecount=0
set extractcount=0

REM 遍历所有压缩文件
for %%f in (*.zip *.rar *.7z) do (
    set /a filecount+=1
    echo [!filecount!] 处理文件: %%f

    REM 创建临时解压目录
    set "tempdir=%workdir%temp_%%~nf"
    if not exist "!tempdir!" mkdir "!tempdir!"

    REM 使用7z解压
    echo 正在解压...
    7z x "%%f" -o"!tempdir!" -y >nul

    if errorlevel 0 (
        set /a extractcount+=1
        echo 解压成功: %%f
    ) else (
        echo 解压失败: %%f
    )
    echo.
)

echo =========================================
echo 解压完成:共找到 %filecount% 个压缩文件,成功解压 %extractcount% 个
echo =========================================
echo.

echo 按任意键开始合并文件...
pause >nul
echo.

REM 文件合并功能
echo 请选择合并方式:
echo 1. 合并所有文本文件(.txt, .log, .ini, .cfg等)
echo 2. 合并所有CSV/TSV文件
echo 3. 合并所有特定扩展名文件
echo 4. 合并所有文件(不推荐)
echo 5. 跳过合并,仅解压
echo.

set /p choice="请输入选择(1-5): "

if "%choice%"=="5" (
    echo 跳过文件合并
    goto :cleanup
)

REM 设置要合并的文件扩展名
if "%choice%"=="1" (
    set "extensions=*.txt *.log *.ini *.cfg *.xml *.json *.yaml *.yml"
    set "mergefile=合并文本文件.txt"
) else if "%choice%"=="2" (
    set "extensions=*.csv *.tsv"
    set "mergefile=合并CSV文件.csv"
) else if "%choice%"=="3" (
    echo.
    set /p customext="请输入要合并的文件扩展名(如:*.txt *.log): "
    set "extensions=%customext%"
    set "mergefile=合并自定义文件.txt"
) else (
    set "extensions=*.*"
    set "mergefile=合并所有文件.txt"
)

echo.
echo 正在合并 %extensions% 文件...
echo 输出文件: %outputdir%\%mergefile%
echo.

REM 清空或创建合并文件
type nul > "%outputdir%\%mergefile%"

set mergecount=0
set filelist=""

REM 查找所有临时目录中的文件
for /d %%d in (%workdir%temp_*) do (
    echo 正在处理目录: %%d
    for %%e in (%extensions%) do (
        for /r "%%d" %%f in (%%e) do (
            if exist "%%f" (
                set /a mergecount+=1
                echo [!mergecount!] 添加: %%~nxf

                REM 添加分隔线
                echo. >> "%outputdir%\%mergefile%"
                echo ========================================= >> "%outputdir%\%mergefile%"
                echo 文件: %%~nxf (来自: %%d) >> "%outputdir%\%mergefile%"
                echo ========================================= >> "%outputdir%\%mergefile%"
                echo. >> "%outputdir%\%mergefile%"

                REM 合并文件内容
                type "%%f" >> "%outputdir%\%mergefile%"
                echo. >> "%outputdir%\%mergefile%"
            )
        )
    )
)

echo.
echo =========================================
echo 合并完成!
echo 共合并 %mergecount% 个文件
echo 输出文件: %outputdir%\%mergefile%
echo =========================================
echo.

:cleanup
echo 是否清理临时文件?
set /p cleantemp="清理临时解压文件?(Y/N, 默认Y): "
if /i "%cleantemp%"=="" set "cleantemp=Y"

if /i "%cleantemp%"=="Y" (
    echo 正在清理临时文件...
    for /d %%d in (%workdir%temp_*) do (
        rd /s /q "%%d" 2>nul
    )
    echo 临时文件已清理!
)

echo.
echo 操作完成!
echo 输出目录: %outputdir%
pause

2. 高级版本 - 支持子目录和更多选项

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

title 高级批量解压合并工具
color 0A

:menu
cls
echo ================================================
echo          高级批量解压合并工具
echo ================================================
echo.
echo 1. 批量解压当前目录所有压缩文件
echo 2. 批量解压指定目录的压缩文件
echo 3. 仅合并已解压的文件(不重新解压)
echo 4. 仅解压不合并
echo 5. 配置选项
echo 6. 退出
echo.

set /p choice="请选择操作(1-6): "

if "%choice%"=="1" goto extract_current
if "%choice%"=="2" goto extract_specified
if "%choice%"=="3" goto merge_only
if "%choice%"=="4" goto extract_only
if "%choice%"=="5" goto config
if "%choice%"=="6" exit

:extract_current
set "source_dir=%~dp0"
goto extract_process

:extract_specified
echo.
set /p source_dir="请输入源目录路径: "
if not exist "%source_dir%" (
    echo 目录不存在!
    pause
    goto menu
)
goto extract_process

:merge_only
goto merge_process

:extract_only
set "merge_mode=false"
goto extract_process

:config
cls
echo ================================================
echo               配置选项
echo ================================================
echo.
echo 当前配置:
echo 压缩密码(如果压缩包有密码): %password%
echo 是否递归子目录: %recursive%
echo 解压后删除原压缩包: %delete_archive%
echo.
echo 1. 设置压缩密码
echo 2. 切换递归模式
echo 3. 切换删除原文件模式
echo 4. 返回主菜单
echo.

set /p config_choice="请选择: "

if "%config_choice%"=="1" (
    set /p password="请输入压缩密码(无密码直接回车): "
)
if "%config_choice%"=="2" (
    if "%recursive%"=="true" (
        set "recursive=false"
    ) else (
        set "recursive=true"
    )
)
if "%config_choice%"=="3" (
    if "%delete_archive%"=="true" (
        set "delete_archive=false"
    ) else (
        set "delete_archive=true"
    )
)
goto config

:extract_process
if not defined merge_mode set "merge_mode=true"
if not defined recursive set "recursive=true"
if not defined delete_archive set "delete_archive=false"
if not defined password set "password="

REM 检查7-Zip
where 7z >nul 2>nul
if errorlevel 1 (
    echo 错误: 需要安装 7-Zip!
    echo 请从 https://www.7-zip.org/ 下载安装
    pause
    goto menu
)

REM 创建输出目录
set "output_dir=%source_dir%_extracted"
if not exist "%output_dir%" mkdir "%output_dir%"

set "temp_dir=%output_dir%\temp"
if not exist "%temp_dir%" mkdir "%temp_dir%"

echo.
echo 开始批量解压...
echo 源目录: %source_dir%
echo 输出目录: %output_dir%
echo.

set count=0
set success=0
set fail=0

REM 搜索压缩文件
if "%recursive%"=="true" (
    REM 递归搜索
    for /r "%source_dir%" %%f in (*.zip *.rar *.7z *.tar *.gz *.bz2) do (
        call :extract_file "%%f" "%%~dpf"
    )
) else (
    REM 仅当前目录
    for %%f in ("%source_dir%\*.zip" "%source_dir%\*.rar" "%source_dir%\*.7z") do (
        call :extract_file "%%f" "%source_dir%"
    )
)

echo.
echo ================================================
echo 解压统计:
echo 总文件数: %count%
echo 成功: %success%
echo 失败: %fail%
echo ================================================

if "%merge_mode%"=="true" (
    echo.
    call :merge_process
)

if "%delete_archive%"=="true" (
    echo.
    echo 正在删除原压缩文件...
    if "%recursive%"=="true" (
        del /q "%source_dir%\*.zip" "%source_dir%\*.rar" "%source_dir%\*.7z" 2>nul
    )
)

echo.
pause
goto menu

:extract_file
set "archive=%~1"
set "arcdir=%~2"

set /a count+=1
echo [!count!] 处理: %%~nxa

REM 创建解压子目录
set "target_dir=%temp_dir%\extract_!count!"
mkdir "!target_dir!" 2>nul

REM 解压命令
if "%password%"=="" (
    7z x "!archive!" -o"!target_dir!" -y >nul
) else (
    7z x "!archive!" -o"!target_dir!" -p%password% -y >nul
)

if errorlevel 0 (
    set /a success+=1
    echo     状态: 成功
) else (
    set /a fail+=1
    echo     状态: 失败
)

goto :eof

:merge_process
echo.
echo 开始合并文件...
echo.

echo 选择合并的文件类型:
echo 1. 文本文件 (.txt, .log, .md, .ini, .cfg)
echo 2. 代码文件 (.java, .py, .cpp, .cs, .js)
echo 3. 数据文件 (.csv, .tsv, .xml, .json)
echo 4. 所有文件
echo 5. 自定义扩展名
echo.

set /p merge_choice="请选择(1-5): "

if "%merge_choice%"=="1" (
    set "patterns=*.txt *.log *.md *.ini *.cfg *.inf *.bat *.sh"
    set "outfile=合并_文本文件.txt"
) else if "%merge_choice%"=="2" (
    set "patterns=*.java *.py *.cpp *.c *.h *.cs *.js *.html *.css *.php"
    set "outfile=合并_代码文件.txt"
) else if "%merge_choice%"=="3" (
    set "patterns=*.csv *.tsv *.xml *.json *.yml *.yaml"
    set "outfile=合并_数据文件.txt"
) else if "%merge_choice%"=="4" (
    set "patterns=*.*"
    set "outfile=合并_所有文件.txt"
) else (
    echo.
    set /p patterns="请输入文件扩展名(用空格分隔): "
    set "outfile=合并_自定义文件.txt"
)

echo.
echo 正在合并文件到: %output_dir%\!outfile!
echo.

REM 创建合并文件
echo // ============================================== > "%output_dir%\!outfile!"
echo // 文件合并结果                                  >> "%output_dir%\!outfile!"
echo // 生成时间: %date% %time%                       >> "%output_dir%\!outfile!"
echo // 源目录: %source_dir%                          >> "%output_dir%\!outfile!"
echo // ============================================== >> "%output_dir%\!outfile!"
echo. >> "%output_dir%\!outfile!"

set merge_count=0

REM 遍历临时目录合并文件
for /r "%temp_dir%" %%f in (!patterns!) do (
    if exist "%%f" (
        set /a merge_count+=1
        echo [!merge_count!] 添加: %%~nxf

        echo. >> "%output_dir%\!outfile!"
        echo ============================================== >> "%output_dir%\!outfile!"
        echo 文件名: %%~nxf >> "%output_dir%\!outfile!"
        echo 路径: %%f >> "%output_dir%\!outfile!"
        echo 大小: %%~zf 字节 >> "%output_dir%\!outfile!"
        echo ============================================== >> "%output_dir%\!outfile!"
        echo. >> "%output_dir%\!outfile!"

        type "%%f" >> "%output_dir%\!outfile!"
        echo. >> "%output_dir%\!outfile!"
    )
)

echo.
echo ================================================
echo 合并完成!
echo 共合并 !merge_count! 个文件
echo 输出文件: %output_dir%\!outfile!
echo ================================================

echo.
set /p clean_temp="是否清理临时文件?(Y/N): "
if /i "!clean_temp!"=="Y" (
    rd /s /q "%temp_dir%" 2>nul
    echo 临时文件已清理!
)

goto :eof

3. 简易版本(快速使用)

@echo off
chcp 65001 >nul

echo 正在批量解压并合并文本文件...

REM 检查7-Zip
where 7z >nul 2>nul || (
    echo 请先安装7-Zip: https://www.7-zip.org/
    pause
    exit
)

REM 创建输出目录
set "output=%~dp0合并结果"
if not exist "%output%" mkdir "%output%"

REM 解压所有压缩文件
for %%z in (*.zip *.rar *.7z) do (
    echo 解压: %%z
    7z x "%%z" -o"%output%\%%~nz" -y >nul
)

REM 合并所有文本文件
echo 正在合并文本文件...
type nul > "%output%\合并结果.txt"

for /r "%output%" %%f in (*.txt *.log *.ini *.cfg) do (
    echo. >> "%output%\合并结果.txt"
    echo ============ %%f ============ >> "%output%\合并结果.txt"
    type "%%f" >> "%output%\合并结果.txt"
)

echo 完成!
echo 结果保存在: %output%\合并结果.txt
pause

使用说明:

准备工作:

安装 7-Zip:从官网 https://www.7-zip.org/ 下载安装 放置脚本:将批处理文件放在需要处理的文件夹中 备份数据:建议先备份原始文件

主要功能:

  • ✅ 批量解压 ZIP、RAR、7Z 等格式
  • ✅ 自动创建分类目录
  • ✅ 文件内容合并
  • ✅ 支持有密码的压缩包
  • ✅ 清理临时文件选项
  • ✅ 详细的操作日志

使用方法:

将脚本保存为 extract_merge.bat 双击运行 按照菜单提示操作

注意事项:

  • 确保有足够的磁盘空间
  • 大文件合并可能需要较长时间
  • 二进制文件不适合文本方式合并
  • 建议先测试少量文件

您可以根据需要修改脚本中的文件扩展名或解压参数!