找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 3257|回复: 35

[文本处理] 已解决:如何判断wim映像的版本

[复制链接]
发表于 2026-7-30 07:56:47 | 显示全部楼层 |阅读模式
本帖最后由 766266yyn 于 2026-7-31 17:46 编辑

请教各位老师:
    批处理如何判断 WinPE 的映像文件,如 boot.wim 的版本,只判断是 Win10 或 Win11 即可,
    不需要判断 Win10 之前版本。

感谢 “批处理之家”
感谢 77七 老师辛苦,我的难题(对我一样的小白来说)完美解决,代码总结如下:

一、该版本需要以管理员运行,否则出错

  1. @echo off
  2. setlocal EnableExtensions
  3. set "wimFile=D:\yynTemp\boot-11.wim"

  4. :: 重要提醒
  5. echo. && echo.
  6. echo 重要提醒:
  7. echo =========
  8. echo. && echo 该程序需要以管理员身份运行,否则会出错!
  9. echo. && echo. && pause
  10. cls
  11. if not exist %wimFile% (
  12.     echo.
  13.     echo.
  14.     echo [错误] 找不到映像文件:%wimFile%
  15.     timeout /t 5 /nobreak >nul
  16.     exit /b 1
  17. )
  18. set "Build="
  19. for /f "tokens=2 delims=:" %%a in ('dism /English /Get-WimInfo /WimFile:"%wimFile%" /index:1^| findstr /b /c:"Version :"') do (
  20.         for /f "tokens=3 delims=." %%b in ("%%a") do set "Build=%%b"
  21.     )
  22. if not defined Build (
  23.     echo. && echo. && echo [错误] 无法读取 WIM 映像版本
  24.     echo.
  25.     pause
  26.     exit /b 1
  27. )
  28. if %Build% GEQ 22000 (
  29.     echo. && echo. && echo %wimFile% 版本是:Windows 11
  30.     echo.
  31.     pause && exit /b 11
  32. ) else (
  33.     echo. && echo. && echo %wimFile% 版本是:Windows 10
  34.     echo.
  35.     pause && exit /b 10
  36. )
复制代码



二、该版本可自动提权

  1. @echo off
  2. setlocal EnableExtensions
  3. title WinPE 映像版本检测
  4. rem ============================================================
  5. rem 自动申请管理员权限
  6. rem ============================================================
  7. fltmc >nul 2>&1
  8. if errorlevel 1 (
  9.     echo 正在申请管理员权限...
  10.     powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^
  11.         "Start-Process -FilePath '%~f0' -Verb RunAs -WorkingDirectory '%~dp0'"
  12.     exit /b
  13. )
  14. rem ============================================================
  15. rem 在这里设置需要检测的 WIM 映像路径
  16. rem ============================================================
  17. set "WimFile=E:\sources\boot.wim"
  18. rem WIM 映像索引
  19. set "WimIndex=1"
  20. rem ============================================================
  21. rem 检查文件是否存在
  22. rem ============================================================
  23. if not exist "%WimFile%" (
  24.     echo.
  25.     echo [错误] 找不到 WIM 映像文件:
  26.     echo "%WimFile%"
  27.     echo.
  28.     pause
  29.     exit /b 1
  30. )

  31. echo.
  32. echo 正在检测:
  33. echo "%WimFile%"
  34. echo.
  35. rem ============================================================
  36. rem 读取映像内部版本号
  37. rem 例如:Version : 10.0.26100
  38. rem ============================================================
  39. set "ImageVersion="
  40. set "Build="

  41. for /f "tokens=2 delims=:" %%A in ('
  42.     dism.exe /English /Get-WimInfo /WimFile:"%WimFile%" /Index:%WimIndex% 2^>nul ^
  43.     ^| findstr /b /c:"Version :"
  44. ') do (
  45.     for /f "tokens=* delims= " %%B in ("%%A") do set "ImageVersion=%%B"
  46. )

  47. if not defined ImageVersion (
  48.     echo [错误] 无法读取 WIM 映像版本。
  49.     echo.
  50.     echo 可能原因:
  51.     echo 1. WIM 文件损坏
  52.     echo 2. 指定的映像索引不存在
  53.     echo 3. 当前 DISM 版本无法读取该映像
  54.     echo.
  55.     pause
  56.     exit /b 2
  57. )
  58. rem 从 10.0.26100 中提取 26100
  59. for /f "tokens=3 delims=." %%A in ("%ImageVersion%") do set "Build=%%A"

  60. if not defined Build (
  61.     echo [错误] 无法解析映像内部版本号:%ImageVersion%
  62.     echo.
  63.     pause
  64.     exit /b 3
  65. )

  66. echo 映像内部版本:%ImageVersion%
  67. echo 系统构建号:%Build%
  68. echo.
  69. rem ============================================================
  70. rem Windows 11 从 Build 22000 开始
  71. rem ============================================================
  72. if %Build% GEQ 22000 (
  73.     echo 判断结果:Windows 11 WinPE
  74. ) else (
  75.     echo 判断结果:Windows 10 WinPE
  76. )

  77. echo.
  78. pause
  79. endlocal
复制代码



 楼主| 发表于 2026-7-30 11:58:34 | 显示全部楼层
各位老师,来过路过,不要错过 ...
发表于 2026-7-30 12:34:21 | 显示全部楼层
一般而言,版本号范围:
   10.0.1xxxx 是 Win10
   大于或等于 10.0.22xxx 是 Win11
发表于 2026-7-30 14:25:44 | 显示全部楼层
dism查找列出映像的文件, 然后看sidebyside中组件的版本, 一般组件版本号就是系统版本, 大概就像这样子
\Windows\WinSxS\x86_microsoft-windows-packagemanager_31bf3856ad364e35_10.0.17763.1_none_817f127d9310406d
  1. dism /list-image /imagefile:boot.wim /index:1|findstr /i \windows\winsxs
  2. pause
复制代码

或者7z之类的直接从wim中提取特定文件, 然后获取提其的文件的版本号, 比如
  1. 7z e boot.wim -o%temp% 1\Windows\System32\kernel32.dll
  2. 7z t "%temp%\kernel32.dll"
  3. pause
复制代码

 楼主| 发表于 2026-7-30 15:16:28 | 显示全部楼层
Five66 发表于 2026-7-30 14:25
dism查找列出映像的文件, 然后看sidebyside中组件的版本, 一般组件版本号就是系统版本, 大概就像这样子
\Wi ...

谢谢老师,我是小白不会弄啊
发表于 2026-7-30 19:16:09 | 显示全部楼层
  1. @echo off
  2. for /f "skip=1 tokens=2 delims=: " %%A in ('dism /Get-ImageInfo /ImageFile:"E:\sources\boot.wim" /index:1^|findstr "Version"') do set "version=%%A"
  3. echo version=%version%
  4. if "%version%" geq "10.0.22000" (
  5.   echo win11
  6. ) else (
  7.   echo win10
  8. )
  9. pause
复制代码
 楼主| 发表于 2026-7-30 20:02:08 | 显示全部楼层

谢谢老师,好像不对,判断Win10的映像显示是Win10, 判断的映像是Win11PE的,但运行结果也显示是Win10
发表于 2026-7-30 20:13:50 | 显示全部楼层
766266yyn 发表于 2026-7-30 20:02
谢谢老师,好像不对,判断Win10的映像显示是Win10, 判断的映像是Win11PE的,但运行结果也显示是Win10 ...

我不知道如何判断版本号;AI说版本号小于等于19045是win10,反之是win11;
最好测试install.wim
发表于 2026-7-31 03:44:02 | 显示全部楼层
AI:
Windows 10 和 Windows 11 的主版本号都是 10.0,需要判断内部版本号 Build:

Build < 22000:Windows 10 WinPE
Build >= 22000:Windows 11 WinPE

CheckWinPE.bat
  1. @echo off
  2. setlocal EnableExtensions

  3. rem 用法:CheckWinPE.bat "D:\sources\boot.wim"
  4. set "WimFile=%~1"

  5. if not defined WimFile set "WimFile=%~dp0boot.wim"

  6. if not exist "%WimFile%" (
  7.     echo [错误] 找不到映像文件:
  8.     echo %WimFile%
  9.     exit /b 1
  10. )

  11. set "Build="

  12. for /f "tokens=2 delims=:" %%A in ('
  13.     dism.exe /English /Get-WimInfo /WimFile:"%WimFile%" /Index:1 2^>nul ^| findstr /b /c:"Version :"
  14. ') do (
  15.     for /f "tokens=3 delims=." %%B in ("%%A") do set "Build=%%B"
  16. )

  17. if not defined Build (
  18.     echo [错误] 无法读取 WIM 映像版本。
  19.     exit /b 1
  20. )

  21. echo 检测到 Build:%Build%

  22. if %Build% GEQ 22000 (
  23.     echo 判断结果:Windows 11 WinPE
  24.     exit /b 11
  25. ) else (
  26.     echo 判断结果:Windows 10 WinPE
  27.     exit /b 10
  28. )
复制代码


调用:
  1. call CheckWinPE.bat "D:\sources\boot.wim"

  2. if errorlevel 11 (
  3.     echo 这是 Windows 11 PE
  4. ) else if errorlevel 10 (
  5.     echo 这是 Windows 10 PE
  6. ) else (
  7.     echo 检测失败
  8. )
复制代码


其中 /English 很重要,可以避免中文、英文系统的 DISM 输出字段不同。通常 boot.wim 的索引 1 和索引 2 使用相同系统版本,所以读取 /Index:1 即可。
 楼主| 发表于 2026-7-31 07:15:16 | 显示全部楼层
77七 发表于 2026-7-31 03:44
AI:
Windows 10 和 Windows 11 的主版本号都是 10.0,需要判断内部版本号 Build:

谢谢老师,运行闪退
发表于 2026-7-31 07:26:37 来自手机 | 显示全部楼层
本帖最后由 77七 于 2026-7-31 07:28 编辑
766266yyn 发表于 2026-7-31 07:15
谢谢老师,运行闪退


先按名字保存第一段代码;然后保存第二段代码为test.bat,代码最后添加一行 pause
 楼主| 发表于 2026-7-31 08:10:37 | 显示全部楼层
77七 发表于 2026-7-31 07:26
先按名字保存第一段代码;然后保存第二段代码为test.bat,代码最后添加一行 pause ...

已经测试了,问题在下面这一段,具体是dism失败


  1. set "Build="
  2. for /f "tokens=2 delims=:" %%a in ('
  3.     dism /English /Get-WimInfo /WimFile:"D:\yynTemp\boot-10.wim" /index:1 >"D:\wimVer.txt" 2>&1^| findstr /b /c:"Version :"
  4. ') do (
  5.     for /f "tokens=3 delims=." %%b in ("%%a") do set "Build=%%b"
  6. )
  7. echo 检测到 Build:%Build%
  8. pause
  9. if not defined Build (
  10.     echo [错误] 无法读取 WIM 映像版本。
  11.     exit /b 1
  12. )

  13. echo 检测到 Build:%Build%
复制代码
发表于 2026-7-31 08:17:03 | 显示全部楼层
766266yyn 发表于 2026-7-31 08:10
已经测试了,问题在下面这一段,具体是dism失败

请把dism报错信息发出来看看,我可以帮你修改。
 楼主| 发表于 2026-7-31 08:55:11 | 显示全部楼层
本帖最后由 766266yyn 于 2026-7-31 08:57 编辑
ShowCode 发表于 2026-7-31 08:17
请把dism报错信息发出来看看,我可以帮你修改。


cmd 闪退,所以在终端管理员测试

屏幕截图.jpg


屏幕截图-1.jpg
发表于 2026-7-31 09:09:41 | 显示全部楼层
766266yyn 发表于 2026-7-31 08:55
cmd 闪退,所以在终端管理员测试

2^>nul 这是BAT脚本文件的语法,在CMD测试的时候请把它删掉再试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-8-19 19:16

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表