如何编写可根据Windows发行版本判断是否执行的批处理脚本
Windows 10 版本过滤批处理脚本实现
实现思路
优先读取注册表EditionID字段做版本判断,相比wmic命令执行速度更快、兼容性更好,在原有Build号过滤逻辑基础上新增版本类型判断,排除家庭版(Core系列)、S模式所有变体。
完整可复用代码
@echo off :: 原有Build号过滤逻辑,保留 FOR /f "tokens=6 delims=[]. " %%i in ('ver') do SET build=%%i IF %build% LSS 17763 ( COLOR E ECHO.=============================================================================== ECHO. ALERT - 不兼容RS5之前的Windows版本 ECHO.=============================================================================== ECHO. PAUSE GOTO :EOF ) :: 新增版本类型判断逻辑,排除家庭版、S版 FOR /F "skip=2 tokens=3" %%a IN ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2^>nul') DO SET edition=%%a :: 匹配包含Core(家庭版全系列)的版本直接退出 IF /I NOT "%edition:Core=%"=="%edition%" ( COLOR E ECHO.=============================================================================== ECHO. ALERT - 不支持Windows家庭版运行 ECHO.=============================================================================== ECHO. PAUSE GOTO :EOF ) :: 匹配包含S(S模式全系列)的版本直接退出 IF /I NOT "%edition:S=%"=="%edition%" ( COLOR E ECHO.=============================================================================== ECHO. ALERT - 不支持Windows S模式版本运行 ECHO.=============================================================================== ECHO. PAUSE GOTO :EOF ) :: 此处往下编写你需要执行的正常业务逻辑即可 ECHO 版本校验通过,开始执行脚本 PAUSE
关键逻辑说明
- 读取注册表命令加了
2>nul参数,避免注册表读取异常时抛出不必要的错误提示 - 匹配逻辑加了
/I参数,不区分大小写,避免因为EditionID大小写不一致导致判断失效 - 模糊匹配规则覆盖了所有家庭版变体(Core、CoreSingleLanguage、CoreCountrySpecific等)和所有S模式变体(CoreS、ProfessionalS、EnterpriseS等)
内容的提问来源于stack exchange,提问作者user16770416
相关产品推荐
相关产品推荐

