欢迎光临
我们一直在努力

Windows 批量解压多个独立 TAR 文件:ROOT 解压模式,避免目录重复嵌套

文章目录

    • 一、需求背景
    • 二、这版脚本解决的问题
    • 三、适用场景
    • 四、完整 BAT 脚本
    • 五、使用前需要修改的地方
      • 1. 7-Zip 路径
      • 2. tar 文件所在目录
      • 3. 解压目标目录
    • 六、ROOT 解压模式是什么意思
    • 七、脚本运行逻辑说明
      • 1. 检查 7-Zip 是否存在
      • 2. 检查源目录是否存在
      • 3. 检查目标盘符是否可访问
      • 4. 统计 tar 文件数量
      • 5. 逐个读取 tar 内部文件数量
      • 6. 判断是否需要解压
      • 7. 使用 7-Zip 解压
    • 八、完成标记 `_extract_done.flag` 的作用
    • 九、为什么日志文件放在源目录中
    • 十、运行效果示例
    • 十一、关于“系统找不到指定的驱动器”的提示
    • 十二、需要注意的问题
      • 1. 这版脚本适合 ROOT 解压模式
      • 2. 文件数量校验不是严格哈希校验
      • 3. 大量小文件解压会比较慢
      • 4. 中断后可以重新运行
      • 5. 建议先用一个 tar 文件测试
    • 十三、与旧版脚本的区别
    • 十四、总结

一、需求背景

之前我分享过一个 Windows 下批量解压 .tar 文件的脚本,当时的使用场景是:

将每个 .tar 文件分别解压到一个与压缩包同名的文件夹中。

例如:

源文件:
folder_001.tar

解压后:
D:\\output\\folder_001\\

但是这次遇到的情况有所不同。

这次的数据是:一个备份文件夹中有多个独立的 tar 文件,每个 tar 文件本身就是由一个小文件夹单独压缩得到的。

也就是说,tar 包内部本身已经带有目录结构,例如:

folder_001.tar
└─ folder_001
└─ folder_001
└─ …

如果继续使用之前的脚本,将每个 tar 文件解压到同名文件夹,就会变成:

D:\\output\\folder_001\\folder_001\\folder_001\\…

这样就会多嵌套一层目录。

因此,这次需要将脚本改成:

所有 tar 文件都直接解压到目标根目录,也就是 ROOT 解压模式。

目标结果应该是:

D:\\output\\
├─ folder_001\\
│ └─ folder_001\\
│ └─ …
├─ folder_002\\
│ └─ folder_002\\
│ └─ …
├─ folder_003\\
│ └─ folder_003\\
│ └─ …
└─ …

而不是:

D:\\output\\folder_001\\folder_001\\folder_001\\…


二、这版脚本解决的问题

这版脚本主要解决以下几个问题:

  • 批量查找指定目录下的所有 .tar 文件;
  • 支持一次处理多个独立 tar 包;
  • 所有 tar 统一解压到目标根目录,避免重复创建同名外层目录;
  • 使用 7-Zip 命令行自动解压;
  • 解压前统计 tar 包内部文件数量;
  • 解压后统计目标目录中的文件数量;
  • 支持 _extract_done.flag 完成标记;
  • 已经解压完成的 tar 文件再次运行时会自动跳过;
  • 如果解压中断,可以重新运行脚本继续补充解压;
  • 生成日志文件,方便后续查看处理情况。

  • 三、适用场景

    这版脚本适合下面这种情况:

    tar_backup\\
    ├─ folder_001.tar
    ├─ folder_002.tar
    ├─ folder_003.tar
    ├─ …
    └─ folder_n.tar

    并且每个 tar 文件内部已经自带第一层目录,例如:

    folder_001.tar
    └─ folder_001
    └─ folder_001
    └─ …

    这时应该将所有 tar 直接解压到目标根目录:

    D:\\output

    而不是分别解压到:

    D:\\output\\folder_001
    D:\\output\\folder_002
    D:\\output\\folder_003

    否则会造成目录重复嵌套。


    四、完整 BAT 脚本

    可以将下面脚本保存为:

    extract_tar_root.bat

    然后双击运行,或者在 CMD 中运行。

    @echo off
    setlocal enabledelayedexpansion
    chcp 936 >nul
    mode con: cols=140 lines=35
    color 07

    :: ==============================================
    :: 固定路径:按你的实际情况修改这里
    :: ==============================================

    :: 7-Zip 路径
    set "SEVENZIP_PATH=C:\\Program Files\\7-Zip\\7z.exe"

    :: tar 文件所在目录
    :: 示例:D:\\tar_backup
    set "SRC_DIR=D:\\tar_backup"

    :: 解压后的目标根目录
    :: 因为 tar 内部已经自带 folder_001\\folder_001\\…
    :: 所以这里直接解压到目标根目录
    set "DEST_DIR=D:\\output"

    :: ==============================================

    set "DEST_DRIVE=%DEST_DIR:~0,3%"
    set "TAR_LIST_FILE=%TEMP%\\_tar_list_temp_%RANDOM%.txt"
    set "LOG_FILE=%SRC_DIR%\\_batch_extract_log.txt"

    echo.
    echo ============================================================
    echo 批量解压 TAR 文件 – ROOT 解压模式
    echo ============================================================
    echo 源目录 : %SRC_DIR%
    echo 目标根目录 : %DEST_DIR%
    echo 日志文件 : %LOG_FILE%
    echo ============================================================
    echo.

    if not exist "%SEVENZIP_PATH%" (
    echo 错误:未找到 7-Zip,请检查路径:
    echo %SEVENZIP_PATH%
    pause
    exit /b
    )

    if not exist "%SRC_DIR%" (
    echo 错误:源目录不存在:
    echo %SRC_DIR%
    pause
    exit /b
    )

    if not exist "%DEST_DRIVE%" (
    echo 错误:目标盘符不存在或不可访问:
    echo %DEST_DRIVE%
    echo.
    echo 请先在 CMD 中测试:
    echo dir %DEST_DRIVE%
    pause
    exit /b
    )

    if not exist "%DEST_DIR%" (
    mkdir "%DEST_DIR%"
    if errorlevel 1 (
    echo 错误:无法创建目标目录:
    echo %DEST_DIR%
    echo 请检查权限,或尝试以管理员身份运行。
    pause
    exit /b
    )
    )

    echo 批量解压开始:%date% %time% > "%LOG_FILE%"
    echo 源目录:%SRC_DIR% >> "%LOG_FILE%"
    echo 目标目录:%DEST_DIR% >> "%LOG_FILE%"
    echo 解压模式:ROOT,所有 tar 直接解压到目标根目录 >> "%LOG_FILE%"
    echo. >> "%LOG_FILE%"

    :: 进入源目录,避免复杂路径导致问题
    pushd "%SRC_DIR%"
    if errorlevel 1 (
    echo 错误:无法进入源目录:
    echo %SRC_DIR%
    pause
    exit /b
    )

    :: ==============================================
    :: 统计 tar 文件总数
    :: ==============================================
    set "TOTAL=0"

    for /f "delims=" %%f in ('dir /b /a-d "*.tar" 2^>nul') do (
    set /a TOTAL+=1
    )

    if %TOTAL% equ 0 (
    echo 未找到任何 tar 文件。
    echo.
    echo 如果目录中确实有压缩包,请确认文件后缀是不是 .tar。
    echo 可以在资源管理器中打开:
    echo 查看 – 显示 – 文件扩展名
    echo.
    popd
    pause
    exit /b
    )

    echo 找到 tar 文件总数:%TOTAL%
    echo 开始逐个检查并解压…
    echo.

    set "CUR=0"
    set "SUCCESS=0"
    set "FAILED=0"
    set "SKIPPED=0"
    set "REEXTRACT=0"

    :: ==============================================
    :: 逐个处理 tar 文件
    :: ==============================================
    for /f "delims=" %%F in ('dir /b /a-d "*.tar" 2^>nul') do (
    set /a CUR+=1
    set /a PERCENT=CUR*100/TOTAL

    set "FILE=%%F"
    set "BASENAME=%%~nF"
    set "ARCHIVE=%SRC_DIR%\\%%F"

    :: ROOT 模式:直接解压到目标根目录
    set "OUT=%DEST_DIR%"

    :: 用 tar 文件同名目录作为校验目录
    :: 例如 folder_001.tar 对应 D:\\output\\folder_001
    set "CHECK_DIR=%DEST_DIR%\\!BASENAME!"

    :: 完成标记写在第一层同名目录下
    set "DONE_FLAG=!CHECK_DIR!\\_extract_done.flag"

    set "TAR_FILE_COUNT=0"
    set "OUT_FILE_COUNT=0"
    set "OUT_FILE_COUNT_AFTER=0"
    set "NEED_EXTRACT=1"

    echo ============================================================
    echo 已处理 !CUR!/%TOTAL% 进度 !PERCENT!%%
    echo 当前文件:!FILE!
    echo 解压输出:!OUT!
    echo 校验目录:!CHECK_DIR!
    echo ============================================================

    echo ============================================================ >> "%LOG_FILE%"
    echo 当前文件:!FILE! >> "%LOG_FILE%"
    echo 解压输出:!OUT! >> "%LOG_FILE%"
    echo 校验目录:!CHECK_DIR! >> "%LOG_FILE%"

    if exist "%TAR_LIST_FILE%" del "%TAR_LIST_FILE%" >nul 2>&1

    :: 读取 tar 内部文件列表
    "%SEVENZIP_PATH%" l -slt "!ARCHIVE!" > "%TAR_LIST_FILE%" 2>nul

    if errorlevel 1 (
    echo 状态:无法读取 tar 文件列表,可能压缩包损坏或路径异常
    echo 状态:无法读取 tar 文件列表,可能压缩包损坏或路径异常 >> "%LOG_FILE%"
    set /a FAILED+=1
    ) else (
    :: 统计 tar 内部文件数量,不统计文件夹
    for /f %%a in ('findstr /c:"Folder = -" "%TAR_LIST_FILE%" ^| find /c /v ""') do (
    set "TAR_FILE_COUNT=%%a"
    )

    :: 统计目标校验目录中已有文件数量
    if exist "!CHECK_DIR!\\" (
    for /f %%a in ('dir /a-d /b /s "!CHECK_DIR!" 2^>nul ^| find /c /v ""') do (
    set "OUT_FILE_COUNT=%%a"
    )
    ) else (
    set "OUT_FILE_COUNT=0"
    )

    echo tar 内部文件数:!TAR_FILE_COUNT!
    echo 目标目录文件数:!OUT_FILE_COUNT!

    echo tar 内部文件数:!TAR_FILE_COUNT! >> "%LOG_FILE%"
    echo 目标目录文件数:!OUT_FILE_COUNT! >> "%LOG_FILE%"

    if !TAR_FILE_COUNT! leq 0 (
    echo 状态:tar 内部文件数为 0,可能读取失败或压缩包异常
    echo 状态:tar 内部文件数为 0,可能读取失败或压缩包异常 >> "%LOG_FILE%"
    set "NEED_EXTRACT=0"
    set /a FAILED+=1
    ) else (
    if exist "!DONE_FLAG!" (
    echo 状态:已检测到完成标记,跳过
    echo 状态:已检测到完成标记,跳过 >> "%LOG_FILE%"
    set "NEED_EXTRACT=0"
    set /a SKIPPED+=1
    ) else (
    if !OUT_FILE_COUNT! geq !TAR_FILE_COUNT! (
    echo 状态:目标目录文件数量已满足,判断为已解压,跳过并补写标记
    echo 状态:目标目录文件数量已满足,跳过并补写标记 >> "%LOG_FILE%"

    if not exist "!CHECK_DIR!" mkdir "!CHECK_DIR!" >nul 2>&1

    echo 完成时间:!date! !time! > "!DONE_FLAG!"
    echo 源文件:!ARCHIVE! >> "!DONE_FLAG!"
    echo 解压输出:!OUT! >> "!DONE_FLAG!"
    echo 校验目录:!CHECK_DIR! >> "!DONE_FLAG!"
    echo tar 内部文件数:!TAR_FILE_COUNT! >> "!DONE_FLAG!"
    echo 目标目录文件数:!OUT_FILE_COUNT! >> "!DONE_FLAG!"
    echo 标记来源:根据文件数量校验自动补写 >> "!DONE_FLAG!"

    set "NEED_EXTRACT=0"
    set /a SKIPPED+=1
    )
    )
    )

    if "!NEED_EXTRACT!"=="1" (
    if !OUT_FILE_COUNT! gtr 0 (
    echo 状态:目标目录文件数量不足,继续补充解压
    echo 状态:目标目录文件数量不足,继续补充解压 >> "%LOG_FILE%"
    set /a REEXTRACT+=1
    ) else (
    echo 状态:目标目录为空或不存在,开始解压
    echo 状态:目标目录为空或不存在,开始解压 >> "%LOG_FILE%"
    )

    if not exist "!OUT!\\" (
    mkdir "!OUT!" >nul 2>&1
    )

    if not exist "!OUT!\\" (
    echo 状态:无法创建解压目录,可能权限不足
    echo 状态:无法创建解压目录,可能权限不足 >> "%LOG_FILE%"
    set /a FAILED+=1
    ) else (
    :: -aos 表示跳过已存在文件,不覆盖
    "%SEVENZIP_PATH%" x "!ARCHIVE!" -aos -o"!OUT!" >nul 2>&1

    if !errorlevel! equ 0 (
    if exist "!CHECK_DIR!\\" (
    for /f %%a in ('dir /a-d /b /s "!CHECK_DIR!" 2^>nul ^| find /c /v ""') do (
    set "OUT_FILE_COUNT_AFTER=%%a"
    )
    ) else (
    set "OUT_FILE_COUNT_AFTER=0"
    )

    echo 解压后文件数:!OUT_FILE_COUNT_AFTER!
    echo 解压后文件数:!OUT_FILE_COUNT_AFTER! >> "%LOG_FILE%"

    if !OUT_FILE_COUNT_AFTER! geq !TAR_FILE_COUNT! (
    if not exist "!CHECK_DIR!" mkdir "!CHECK_DIR!" >nul 2>&1

    echo 完成时间:!date! !time! > "!DONE_FLAG!"
    echo 源文件:!ARCHIVE! >> "!DONE_FLAG!"
    echo 解压输出:!OUT! >> "!DONE_FLAG!"
    echo 校验目录:!CHECK_DIR! >> "!DONE_FLAG!"
    echo tar 内部文件数:!TAR_FILE_COUNT! >> "!DONE_FLAG!"
    echo 解压后文件数:!OUT_FILE_COUNT_AFTER! >> "!DONE_FLAG!"
    echo 标记来源:本次解压成功并通过文件数量校验 >> "!DONE_FLAG!"

    echo 状态:解压成功,文件数量校验通过
    echo 状态:解压成功,文件数量校验通过 >> "%LOG_FILE%"
    set /a SUCCESS+=1
    ) else (
    echo 状态:解压完成但文件数量不足,可能解压不完整
    echo 状态:解压完成但文件数量不足,可能解压不完整 >> "%LOG_FILE%"
    set /a FAILED+=1
    )
    ) else (
    echo 状态:解压失败
    echo 状态:解压失败 >> "%LOG_FILE%"
    set /a FAILED+=1
    )
    )
    )
    )

    echo.
    echo. >> "%LOG_FILE%"
    )

    if exist "%TAR_LIST_FILE%" del "%TAR_LIST_FILE%" >nul 2>&1

    popd

    echo ============================================================
    echo 全部处理完成
    echo ============================================================
    echo 总计 tar 文件:%TOTAL% 个
    echo 本次成功解压:%SUCCESS% 个
    echo 本次失败:%FAILED% 个
    echo 已跳过:%SKIPPED% 个
    echo 补充解压:%REEXTRACT% 个
    echo 解压根目录:%DEST_DIR%
    echo 日志文件:%LOG_FILE%
    echo ============================================================
    echo.

    echo ============================================================ >> "%LOG_FILE%"
    echo 全部处理完成:%date% %time% >> "%LOG_FILE%"
    echo 总计 tar 文件:%TOTAL% 个 >> "%LOG_FILE%"
    echo 本次成功解压:%SUCCESS% 个 >> "%LOG_FILE%"
    echo 本次失败:%FAILED% 个 >> "%LOG_FILE%"
    echo 已跳过:%SKIPPED% 个 >> "%LOG_FILE%"
    echo 补充解压:%REEXTRACT% 个 >> "%LOG_FILE%"
    echo 解压根目录:%DEST_DIR% >> "%LOG_FILE%"
    echo 日志文件:%LOG_FILE% >> "%LOG_FILE%"

    pause


    五、使用前需要修改的地方

    脚本中主要需要修改这三个路径。

    1. 7-Zip 路径

    set "SEVENZIP_PATH=C:\\Program Files\\7-Zip\\7z.exe"

    如果你的 7-Zip 安装在其他位置,需要改成自己电脑上的路径。

    可以在资源管理器中找到 7z.exe,然后复制完整路径。


    2. tar 文件所在目录

    set "SRC_DIR=D:\\tar_backup"

    这里填写所有 .tar 文件所在的文件夹。

    例如你的文件结构是:

    D:\\tar_backup\\
    ├─ folder_001.tar
    ├─ folder_002.tar
    ├─ …
    └─ folder_n.tar

    那么 SRC_DIR 就写成:

    set "SRC_DIR=D:\\tar_backup"


    3. 解压目标目录

    set "DEST_DIR=D:\\output"

    这里填写最终希望解压到的根目录。

    本脚本使用 ROOT 模式,所以所有 tar 文件都会直接解压到这个目录下。


    六、ROOT 解压模式是什么意思

    之前的脚本逻辑是:

    folder_001.tar → D:\\output\\folder_001\\

    也就是每个 tar 文件都会额外创建一个同名文件夹。

    但这次 tar 包内部本身已经有目录:

    folder_001.tar
    └─ folder_001
    └─ folder_001
    └─ …

    所以这次不能再额外创建一层同名目录。

    本脚本采用 ROOT 解压模式:

    folder_001.tar → D:\\output\\

    由于 tar 内部自带目录,所以实际解压结果会变成:

    D:\\output\\folder_001\\folder_001\\…

    这才是符合预期的结果。


    七、脚本运行逻辑说明

    1. 检查 7-Zip 是否存在

    脚本首先检查:

    C:\\Program Files\\7-Zip\\7z.exe

    是否存在。

    如果不存在,说明 7-Zip 路径设置错误,脚本会直接退出。


    2. 检查源目录是否存在

    脚本会检查:

    SRC_DIR

    是否存在。

    如果源目录不存在,说明 tar 文件路径设置错误。


    3. 检查目标盘符是否可访问

    脚本会根据目标路径提取盘符,例如:

    D:\\

    如果目标盘符不存在或不可访问,脚本会提示错误。


    4. 统计 tar 文件数量

    脚本会统计源目录下所有 .tar 文件:

    dir /b /a-d "*.tar"

    例如统计结果可能是:

    找到 tar 文件总数:45


    5. 逐个读取 tar 内部文件数量

    每处理一个 tar 文件,脚本会先执行:

    "%SEVENZIP_PATH%" l -slt "!ARCHIVE!"

    这个命令用于读取 tar 包内部文件列表。

    然后通过:

    findstr /c:"Folder = -"

    统计 tar 包内部的文件数量,不统计文件夹。


    6. 判断是否需要解压

    脚本会根据三个条件判断是否需要解压:

  • 目标目录是否已经存在;
  • 目标目录中的文件数量是否已经达到 tar 内部文件数量;
  • 是否存在 _extract_done.flag 完成标记。
  • 如果已经有完成标记,则直接跳过。

    如果文件数量已经满足要求,也会跳过并补写完成标记。

    如果目标文件数量不足,则继续补充解压。


    7. 使用 7-Zip 解压

    实际解压命令是:

    "%SEVENZIP_PATH%" x "!ARCHIVE!" -aos -o"!OUT!"

    其中:

    x

    表示按原目录结构解压。

    -aos

    表示跳过已经存在的文件,不覆盖。

    -o"!OUT!"

    表示指定输出目录。

    这里的输出目录就是:

    D:\\output


    八、完成标记 _extract_done.flag 的作用

    每个 tar 解压成功后,脚本会在对应的第一层目录下写入一个完成标记,例如:

    D:\\output\\folder_001\\_extract_done.flag

    这个文件中会记录:

    完成时间
    源文件路径
    解压输出目录
    校验目录
    tar 内部文件数
    解压后文件数
    标记来源

    下次重新运行脚本时,如果检测到这个文件,就会认为该 tar 已经解压完成,然后直接跳过。

    这样可以避免重复解压。


    九、为什么日志文件放在源目录中

    这版脚本将日志文件放在源目录:

    set "LOG_FILE=%SRC_DIR%\\_batch_extract_log.txt"

    而不是目标目录。

    这样做的原因是:目标目录可能正在被大量写入,如果日志也放到目标目录,查看起来不太方便。

    日志文件会记录每个 tar 文件的处理情况,包括:

    当前文件
    解压输出
    校验目录
    tar 内部文件数
    目标目录文件数
    解压后文件数
    最终状态

    如果后续发现某个 tar 解压失败,可以先查看这个日志。


    十、运行效果示例

    运行时,控制台会显示类似内容:

    ============================================================
    批量解压 TAR 文件 – ROOT 解压模式
    ============================================================
    源目录 : D:\\tar_backup
    目标根目录 : D:\\output
    日志文件 : D:\\tar_backup\\_batch_extract_log.txt
    ============================================================

    找到 tar 文件总数:45
    开始逐个检查并解压…

    ============================================================
    已处理 1/45 进度 2%
    当前文件:folder_001.tar
    解压输出:D:\\output
    校验目录:D:\\output\\folder_001
    ============================================================

    tar 内部文件数:xxxx
    目标目录文件数:0
    状态:目标目录为空或不存在,开始解压
    解压后文件数:xxxx
    状态:解压成功,文件数量校验通过

    最后会输出汇总:

    ============================================================
    全部处理完成
    ============================================================
    总计 tar 文件:45 个
    本次成功解压:45 个
    本次失败:0 个
    已跳过:0 个
    补充解压:0 个
    解压根目录:D:\\output
    日志文件:D:\\tar_backup\\_batch_extract_log.txt
    ============================================================


    十一、关于“系统找不到指定的驱动器”的提示

    运行过程中,有时可能会看到类似提示:

    系统找不到指定的驱动器。

    如果后续脚本仍然继续执行,并且能看到:

    tar 内部文件数:xxxx
    目标目录文件数:xxxx
    状态:解压成功,文件数量校验通过

    那么通常说明核心解压流程仍然是正常的。

    但如果脚本直接退出,或者一直显示解压失败,就需要重点检查:

  • DEST_DIR 对应的盘符是否真的存在;
  • 目标磁盘是否可以正常读写;
  • 路径中是否有特殊字符;
  • 是否有权限创建目录;
  • 7-Zip 路径是否正确。
  • 可以先在 CMD 中测试:

    dir D:\\

    如果这里都无法访问,说明目标盘符本身存在问题。


    十二、需要注意的问题

    1. 这版脚本适合 ROOT 解压模式

    这版脚本适合 tar 包内部已经自带第一层目录的情况。

    如果你的 tar 文件内部没有同名目录,而是直接就是文件,那么这版脚本会把所有 tar 里的文件都解压到同一个目标根目录下,可能造成混乱。

    这种情况下,应该使用“每个 tar 解压到同名文件夹”的旧版脚本。


    2. 文件数量校验不是严格哈希校验

    脚本判断是否解压完成,主要依据是文件数量:

    目标目录文件数 >= tar 内部文件数

    这种方法适合快速判断是否大致解压完整,但它不是严格校验。

    如果需要更严格的校验,还需要进一步加入文件大小、文件名列表或者哈希校验。


    3. 大量小文件解压会比较慢

    如果 tar 包中包含大量几 KB 的小文件,解压速度可能会明显变慢。

    这是正常现象,因为大量小文件写入磁盘时,本身就比少量大文件更慢。


    4. 中断后可以重新运行

    脚本使用了:

    -aos

    表示跳过已经存在的文件。

    因此如果中途断电、报错或手动中断,可以重新运行脚本。

    脚本会尽量跳过已经解压完成的内容,只继续补充缺失部分。


    5. 建议先用一个 tar 文件测试

    正式处理大量 tar 文件之前,建议先只保留一个 tar 文件测试。

    例如只测试:

    folder_001.tar

    确认解压结果是:

    D:\\output\\folder_001\\folder_001\\…

    而不是:

    D:\\output\\folder_001\\folder_001\\folder_001\\…

    确认目录结构正确后,再批量处理所有 tar 文件。


    十三、与旧版脚本的区别

    旧版脚本的核心逻辑是:

    每个 tar 解压到同名文件夹

    例如:

    folder_001.tar → D:\\output\\folder_001\\

    新版脚本的核心逻辑是:

    所有 tar 直接解压到目标根目录

    例如:

    folder_001.tar → D:\\output\\

    两者的区别主要取决于 tar 包内部有没有自带目录。

    如果 tar 内部没有目录,用旧版。

    如果 tar 内部已经自带目录,用新版 ROOT 模式。


    十四、总结

    这次脚本主要是对之前批量解压 tar 文件脚本的一次场景化更新。

    之前的脚本适合:

    tar 内部没有完整外层目录

    所以需要每个 tar 解压到同名文件夹。

    而这次的情况是:

    tar 内部已经包含了同名目录结构

    如果继续使用旧脚本,就会造成目录重复嵌套。

    因此这版脚本改成 ROOT 解压模式,将所有 tar 统一解压到目标根目录,同时保留了:

  • 批量处理;
  • 文件数量校验;
  • 自动跳过;
  • 断点续解压;
  • 完成标记;
  • 日志记录。
  • 对于多个独立 tar 包、每个 tar 包内部已经自带目录结构的场景,这版脚本会更合适。

    赞(0)
    未经允许不得转载:171主机测评 » Windows 批量解压多个独立 TAR 文件:ROOT 解压模式,避免目录重复嵌套
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址