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

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

[复制链接]
发表于 4 天前 | 显示全部楼层
本帖最后由 77七 于 2026-7-31 17:11 编辑
766266yyn 发表于 2026-7-31 12:11
确实,以管理员运行脚本通过
非常感谢老师


%~1是被调用脚本接收的参数, 如果为空,则默认是被调用脚本所在目录下的boot.wim。



让ai修改了下,添加了提权代码及脚本中自定义路径,不再采用调用的方式。(ai解决这些问题,基本手到擒来,就是喜欢把脚本写的很长,不过这样对初学者还是挺友好的)

最近我安装了某开机还原软件,默认修改组策略,导致软件默认以管理员权限运行,故无法测试提权代码,如果不行就找其它的换一下。


  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
复制代码
 楼主| 发表于 4 天前 | 显示全部楼层
77七 发表于 2026-7-31 17:05
%~1是被调用脚本接收的参数, 如果为空,则默认是被调用脚本所在目录下的boot.wim。

完美通过,谢谢
发表于 4 天前 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-7-31 20:29 编辑


应该过滤返回值第二行的 Version:.... 字段就可以了,订正如下

test.bat
  1. @echo off &fltmc>nul 2>&1 || (powershell -c "start '%~f0' -verb runas" &exit/b)
  2. setlocal &set "wF=D:\yynTemp\boot-10.wim"
  3. if not exist "%wF%"  (set/p="未发现 %wF% 回车键退出..." &exit/b)
  4. for /f "tokens=2 delims=: " %%v in ('dism /English /Get-WimInfo /WimFile:"%wF%" /index:1 ^|find "Version : " ') do (
  5.     set "v=%%v" &setlocal enabledelayedexpansion &set "v=!v:~,7!"
  6.     if "!v!" geq "10.0.22" echo,是win11桌面版本
  7.     if "!v!" geq "10.0.10" if "!v!" leq "10.0.19" echo,是win10桌面版本
  8.     endlocal )
  9. pause&exit/b
复制代码
 楼主| 发表于 4 天前 | 显示全部楼层
aloha20200628 发表于 2026-7-31 18:16
应该过滤返回值第二行的 Version:.... 字段就可以了,订正如下

test.bat


谢谢

管理员运行:

屏幕截图.jpg
发表于 4 天前 | 显示全部楼层
766266yyn 发表于 2026-7-31 18:26
谢谢

管理员运行:


33楼代码已订正,源代码改为 find 后应该删除原来  findstr 的参数 /b,抱歉了...
 楼主| 发表于 4 天前 | 显示全部楼层
aloha20200628 发表于 2026-7-31 20:34
33楼代码已订正,源代码改为 find 后应该删除原来  findstr 的参数 /b,抱歉了... ...

老师客气了,这个没问题,非常感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-4 06:58

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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