批处理解包*.wim、*.msu、*.cab 格式的文件

技术问题

批处理解包*.wim、*.msu、*.cab 格式的文件

2024-07-26 09:18


批处理解包 *.esd、*.wim、*.msu、*.cab 格式的文件,批处理解压系统镜像

                                            




折腾安装镜像或更新补丁时总免不了解包处理,频繁手工操作甚是麻烦,此批处理解决问题
批处理文件内容及注解如下:


: ================================== -*-☆-*- ==================================
:
: 脚本功能: 解包 *.esd、*.wim、*.msu、*.cab 格式文件
:
: 使用方法: 将该脚本文件放入待处理文件所在文件夹,而后以管理员身份运行即可。
:
: ==============================================================================
  @Echo OFF & CLS & COLOR 1F & TITLE 正在处理文件包,请稍后 ...

  Call :DoErgodic "%~dp0"

  TITLE 已知类型的文件包处理完毕!
Goto :Eof

: ================================== -*-☆-*- ==================================
:
: 脚本功能: 遍历已知类型的文件包
:
: 调用方法: Call :DoErgodic <文件夹>
:
: ==============================================================================
:DoErgodic
  :-> 处理已知类型文件包
  For %%e In (.esd .wim .msu .cab) Do (
    If Exist "%~1*%%e" For /f %%i In ('Dir /a:-D /b "%~1*%%e"') Do Call :DoExtract "%~1%%i"
  )
Goto :Eof

: ================================== -*-☆-*- ==================================
:
: 脚本功能: 解包处理
:
: 调用方法:  Call :DoExtract <待解包文件>
:
: ==============================================================================
:DoExtract
  :-> 保存当前目录后更改当前目录,此举可防止因传给相关处理命令的参数超长而出错!
  PUSHD "%~dp1"

  :-> 显示待解包文件
  Echo.&Echo =^> %~1

  :-> 创建解包文件夹
  If Not Exist "%~n1" (MD "%~n1" || (Echo 创建文件夹失败! && POPD && Goto :Eof))

  :-> 解包处理
  If "%~x1" EQU ".cab" (
    :-> 处理 *.cab 文件
    EXPAND "%~nx1" -F:*.* "%~n1" >nul 2>nul
  ) Else (
    :-> 处理 *.esd、*.wim、*.msu 文件
    Dism /Apply-Image /ImageFile:"%~nx1" /Index:1 /ApplyDir:"%~n1" /Quiet >nul 2>nul
  )

  :-> 解出文件计数
  Set _Cnt=0
  For /f "delims=" %%i in ('Dir /a:-D /b "%~n1" 2^>nul') Do Set /a _Cnt+=1
  :-> 显示处理结果
  If Defined _Cnt (Echo.&Echo.  - 解出 %_Cnt% 个文件) Else (Echo.&Echo.  - 解包失败!)

  :-> 处理解出的文件包(若有的话)
  Call :DoErgodic "%~dpn1\"

  :-> 恢复当前目录
  POPD
Goto :Eof

label :
  • 批处理解包 *.esd、*.wim、*.msu、*.cab 格式的文件
  • 批处理解压系统镜像