无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 680|回复: 49
打印 上一主题 下一主题

判断当前系统版本-批处理代码测试

[复制链接]
跳转到指定楼层
1#
本帖最后由 倒垃圾的歌者 于 2024-11-13 13:14 编辑

文件 检测当前系统版本.zip (778 Bytes, 下载次数: 37)


代码如下:
  1. @echo off&(cd/d "%~dp0")& title 检测当前系统版本 & color f0 &(cacls "%SystemDrive%\System Volume Information" >nul 2>&1)||(start "" mshta vbscript:CreateObject^("Shell.Application"^).ShellExecute^("%~snx0"," %*","","runas",1^)^(window.close^)&exit /b)

  2. for /f "tokens=2* skip=2" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do set SystemVersion=%%b

  3. :: 检测并设置%SystemVersion%为"Windows XP"
  4. if /i "%SystemVersion:Windows XP=%" neq "%SystemVersion%" (
  5.     set SystemVersion=XP
  6. )

  7. :: 检测并设置%SystemVersion%为"Windows 7"
  8. if /i "%SystemVersion:Windows 7=%" neq "%SystemVersion%" (
  9.     set SystemVersion=7
  10. )

  11. :: 检测并设置%SystemVersion%为"Windows 8"
  12. if /i "%SystemVersion:Windows 8=%" neq "%SystemVersion%" (
  13.     set SystemVersion=8
  14. )

  15. :: 检测并设置%SystemVersion%为"Windows 10"
  16. if /i "%SystemVersion:Windows 10=%" neq "%SystemVersion%" (
  17.     set SystemVersion=10
  18. )

  19. :: 检测并设置%SystemVersion%为"Windows 11"
  20. if /i "%SystemVersion:Windows 11=%" neq "%SystemVersion%" (
  21.     set SystemVersion=11
  22. )

  23. :: 显示结果
  24. goto Win%SystemVersion%

  25. :WinXP
  26. echo.
  27. echo 当前系统为Windows XP
  28. echo.
  29. pause

  30. :Win7
  31. echo.
  32. echo 当前系统为Windows 7
  33. echo.
  34. pause

  35. :Win8
  36. echo.
  37. echo 当前系统为Windows 8
  38. echo.
  39. pause

  40. :Win10
  41. echo.
  42. echo 当前系统为Windows 10
  43. echo.
  44. pause

  45. :Win11
  46. echo.
  47. echo 当前系统为Windows 11
  48. echo.
  49. pause
复制代码

由代码小浣熊优化

  1. @echo off
  2. color f0
  3. title 检测当前系统版本

  4. :: 以管理员权限运行
  5. if not %errorlevel%==0 (
  6.     start "" mshta vbscript:CreateObject^("Shell.Application"^).ShellExecute^("%~snx0"," %*","","runas",1^)^(window.close^)&exit /b
  7. )

  8. :: 获取系统版本信息
  9. for /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do set "SystemVersion=%%b"

  10. :: 检测并设置%SystemVersion%为"Windows XP"
  11. if /i "%SystemVersion:Windows XP=%" neq "%SystemVersion%" set "SystemVersion=XP"

  12. :: 检测并设置%SystemVersion%为"Windows 7"
  13. if /i "%SystemVersion:Windows 7=%" neq "%SystemVersion%" set "SystemVersion=7"

  14. :: 检测并设置%SystemVersion%为"Windows 8"
  15. if /i "%SystemVersion:Windows 8=%" neq "%SystemVersion%" set "SystemVersion=8"

  16. :: 检测并设置%SystemVersion%为"Windows 8.1"
  17. if /i "%SystemVersion:Windows 8.1=%" neq "%SystemVersion%" set "SystemVersion=8.1"

  18. :: 检测并设置%SystemVersion%为"Windows 10"
  19. if /i "%SystemVersion:Windows 10=%" neq "%SystemVersion%" set "SystemVersion=10"

  20. :: 检测并设置%SystemVersion%为"Windows 11"
  21. if /i "%SystemVersion:Windows 11=%" neq "%SystemVersion%" set "SystemVersion=11"

  22. :: 根据系统版本跳转到相应的输出信息
  23. goto Win%SystemVersion%

  24. :WinXP
  25. echo.
  26. echo 当前系统为Windows XP
  27. echo.
  28. pause
  29. exit /b

  30. :Win7
  31. echo.
  32. echo 当前系统为Windows 7
  33. echo.
  34. pause
  35. exit /b

  36. :Win8
  37. echo.
  38. echo 当前系统为Windows 8
  39. echo.
  40. pause
  41. exit /b

  42. :Win8.1
  43. echo.
  44. echo 当前系统为Windows 8.1
  45. echo.
  46. pause
  47. exit /b

  48. :Win10
  49. echo.
  50. echo 当前系统为Windows 10
  51. echo.
  52. pause
  53. exit /b

  54. :Win11
  55. echo.
  56. echo 当前系统为Windows 11
  57. echo.
  58. pause
  59. exit /b
复制代码

检测当前系统版本-代码小浣熊优化.zip (808 Bytes, 下载次数: 30)

参考@
wangyibin@1G空间100元 最终优化版本
  1. @echo off
  2. cd /d "%~dp0"
  3. color f0
  4. title 检测当前系统版本

  5. :: 以管理员权限运行
  6. if not %errorlevel%==0 (
  7.     start "" mshta vbscript:CreateObject^("Shell.Application"^).ShellExecute^("%~snx0"," %*","","runas",1^)^(window.close^)&exit /b
  8. )

  9. :: 获取系统版本信息
  10. for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do set "SystemVersion=%%b"
  11. for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentBuild"') do set "BuildVersion=%%b"
  12. for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "EditionID"') do set "Product-type=%%b"
  13. for /f "tokens=3" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "UBR"') do set "UBR=%%i"
  14. set /a "UBR10=%UBR%"

  15. :: 判断系统为32位还是64位
  16. wmic os get osarchitecture | find /i "64" >nul && set "bit=x64" || set "bit=x32"

  17. :: 检查系统版本,确保精确匹配
  18. if /i "%SystemVersion:Windows XP=%" neq "%SystemVersion%" (goto :WinXP)
  19. if /i "%SystemVersion:Windows 7=%" neq "%SystemVersion%" (goto :Win7)
  20. if /i "%SystemVersion:Windows 8=%" neq "!SystemVersion!" (goto :Win8)
  21. if /i "%SystemVersion:Windows 8.1=%" neq "%SystemVersion%" (goto :Win8.1)
  22. if /i "%SystemVersion:Windows 10=%" neq "%SystemVersion%" (
  23.     if %BuildVersion% GEQ 22000 goto :Win11
  24.     goto :Win10
  25. )

  26. :: 未检测到已知版本时的处理
  27. echo 无法检测到已知的 Windows 版本。
  28. goto :End

  29. :WinXP
  30. echo.
  31. echo 当前系统为 Windows XP %Product-type% %BuildVersion%.%UBR10% %bit%
  32. echo.
  33. goto :End

  34. :Win7
  35. echo.
  36. echo 当前系统为 Windows 7 %Product-type% %BuildVersion%.%UBR10% %bit%
  37. echo.
  38. goto :End

  39. :Win8
  40. echo.
  41. echo 当前系统为 Windows 8 %Product-type% %BuildVersion%.%UBR10% %bit%
  42. echo.
  43. goto :End

  44. :Win8.1
  45. echo.
  46. echo 当前系统为 Windows 8.1 %Product-type% %BuildVersion%.%UBR10% %bit%
  47. echo.
  48. goto :End

  49. :Win10
  50. echo.
  51. echo 当前系统为 Windows 10 %Product-type% %BuildVersion%.%UBR10% %bit%
  52. echo.
  53. goto :End

  54. :Win11
  55. echo.
  56. echo 当前系统为 Windows 11 %Product-type% %BuildVersion%.%UBR10% %bit%
  57. echo.
  58. goto :End

  59. :End
  60. pause
  61. exit /b
复制代码

文件 检测当前系统版本-最终版本.zip (1001 Bytes, 下载次数: 9)

有没有人测试一下是否有用?

Windows 10已测试成功!



如果你觉得有用就发个Windows X系统通过



点评

你这两个,都可以准确读出系统版本。  发表于 前天 02:35
2#
发表于 3 天前 | 只看该作者
能不能检测到linux?

点评

这是测试Windows的,我对liunx不了解,抱歉  详情 回复 发表于 3 天前
回复

使用道具 举报

3#
 楼主| 发表于 3 天前 | 只看该作者
qetuo 发表于 2024-11-12 18:34
能不能检测到linux?

这是测试Windows的,我对liunx不了解,抱歉
回复

使用道具 举报

4#
发表于 3 天前 | 只看该作者
好奇怪

点评

可能是Windows10改的  详情 回复 发表于 3 天前
回复

使用道具 举报

5#
 楼主| 发表于 3 天前 | 只看该作者

可能是Windows10改的
回复

使用道具 举报

6#
发表于 3 天前 | 只看该作者
为了提高可读性和代码结构,你可以考虑简化重复性的 if 条件判断,比如通过 for 循环遍历检测版本信息,减少代码的冗余。

  1. @echo off
  2. cd /d "%~dp0"
  3. title 检测当前系统版本
  4. color f0
  5. (cacls "%SystemDrive%\System Volume Information" >nul 2>&1) || (
  6.     start "" mshta vbscript:CreateObject^("Shell.Application"^).ShellExecute^("%~snx0"," %*","","runas",1^)^(window.close^)
  7.     exit /b
  8. )

  9. :: 获取系统版本信息
  10. for /f "tokens=2* skip=2" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do set SystemVersion=%%b

  11. :: 定义版本信息列表
  12. set "versions=XP=Windows XP;7=Windows 7;8=Windows 8;10=Windows 10;11=Windows 11"

  13. :: 遍历版本列表并检测当前系统版本
  14. for %%v in (%versions%) do (
  15.     for /f "tokens=1,2 delims==" %%x in ("%%v") do (
  16.         if /i "%SystemVersion:%%y=%" neq "%SystemVersion%" (
  17.             set SystemVersion=%%x
  18.             goto Win%%x
  19.         )
  20.     )
  21. )

  22. :: 显示结果
  23. goto End

  24. :WinXP
  25. echo.
  26. echo 当前系统为 Windows XP
  27. goto End

  28. :Win7
  29. echo.
  30. echo 当前系统为 Windows 7
  31. goto End

  32. :Win8
  33. echo.
  34. echo 当前系统为 Windows 8
  35. goto End

  36. :Win10
  37. echo.
  38. echo 当前系统为 Windows 10
  39. goto End

  40. :Win11
  41. echo.
  42. echo 当前系统为 Windows 11
  43. goto End

  44. :End
  45. echo.
  46. pause
  47. exit /b
复制代码
代码简化说明
  • 版本信息列表:使用 set "versions=..." 定义一个包含所有版本信息的列表,每项格式为 标识=系统名称。
  • 循环检测:使用嵌套 for 循环解析版本列表,检测 SystemVersion 是否包含对应的系统名称。如果匹配到,直接设置 SystemVersion 为标识并跳转到相应标签。
  • 统一结束处理:在所有标签跳转后添加 :End 标签,避免每个标签都用 pause,同时使代码更整洁。

点评

for /f "tokens=2,3,4 skip=2" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do echo 当前系统为%%b %%c 试试  详情 回复 发表于 前天 08:14
你这个不准确啊,我Win10识别成XP了。  发表于 前天 02:32
你用的chatgpt优化的? [attachimg]550201[/attachimg]  详情 回复 发表于 3 天前
很不错 简洁  发表于 3 天前
回复

使用道具 举报

7#
发表于 3 天前 | 只看该作者
Windows10  PE 下不行

点评

PE本来就是阉割的,为什么去那里运行?  详情 回复 发表于 3 天前
回复

使用道具 举报

8#
发表于 3 天前 | 只看该作者
Windows8.1没有?

点评

Windows8.1其实就是Windows8系统,8.1不是一个系统大版本  详情 回复 发表于 3 天前
回复

使用道具 举报

9#
 楼主| 发表于 3 天前 | 只看该作者
yyz2191958 发表于 2024-11-12 18:53
Windows10  PE 下不行

PE本来就是阉割的,为什么去那里运行?
回复

使用道具 举报

10#
发表于 3 天前 | 只看该作者
本帖最后由 1G空间100元 于 2024-11-12 18:58 编辑

楼主的脚本不错
另一个论坛上看到的:

@echo off
:: 查询注册表值
for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do set "OSX=%%i"
rem for /f "tokens=3" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "DisplayVersion"') do set "OSV=%%i"
rem 上面这个是查询版本的发行号 在Win10或Win2016以前的系统中没有
for /f "tokens=3" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentBuild"') do set "CurrentBuild=%%i"
for /f "tokens=3" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "UBR"') do set "UBR=%%i"
:: 将二进制数据转换为十进制
set  /a UBR10=%UBR%
:: 输出结果
echo 本系统的详细版本:
echo %OSX:~29% %CurrentBuild%.%UBR10%
winver
echo 请按任意键退出…
pause>nul

点评

10 PE 输出正确  发表于 3 天前
这个脚本,我的8.1系统判断正确  详情 回复 发表于 3 天前

评分

参与人数 1无忧币 +3 收起 理由
yyz2191958 + 3

查看全部评分

回复

使用道具 举报

11#
 楼主| 发表于 3 天前 | 只看该作者

Windows8.1其实就是Windows8系统,8.1不是一个系统大版本

点评

原来如此  详情 回复 发表于 3 天前
回复

使用道具 举报

12#
发表于 3 天前 | 只看该作者
谢谢1、6、10楼分享
回复

使用道具 举报

13#
 楼主| 发表于 3 天前 | 只看该作者
wangyibin 发表于 2024-11-12 18:52
为了提高可读性和代码结构,你可以考虑简化重复性的 if 条件判断,比如通过 for 循环遍历检测版本信息,减 ...

你用的chatgpt优化的?



点评

GPT-4o 模型 协助  详情 回复 发表于 3 天前
回复

使用道具 举报

14#
发表于 3 天前 | 只看该作者
THX~!感恩分享摟,謝謝大大喔~~!辛苦了!^^

点评

你先测试一下有没有用吧  详情 回复 发表于 3 天前
回复

使用道具 举报

15#
 楼主| 发表于 3 天前 | 只看该作者
hmaaaa 发表于 2024-11-12 19:07
THX~!感恩分享摟,謝謝大大喔~~!辛苦了!^^

你先测试一下有没有用吧
回复

使用道具 举报

16#
发表于 3 天前 | 只看该作者

GPT-4o 模型 协助

点评

chatgpt不可全信,我举个例子,比如 我这段的意思是如果输出结果中只要包含“10”这个字符串的,就设定系统版本为10,我这明显是Windows10系统,然后它告诉我我的系统是XP  详情 回复 发表于 3 天前
回复

使用道具 举报

17#
发表于 3 天前 | 只看该作者
1G空间100元 发表于 2024-11-12 18:56
楼主的脚本不错
另一个论坛上看到的:

这个脚本,我的8.1系统判断正确

点评

这个脚本判断是做正确的 会显示 系统版本+大版本号+小版本号  详情 回复 发表于 3 天前
回复

使用道具 举报

18#
发表于 3 天前 | 只看该作者
倒垃圾的歌者 发表于 2024-11-12 18:56
Windows8.1其实就是Windows8系统,8.1不是一个系统大版本

原来如此

点评

你要的话我可以给你改进一下  详情 回复 发表于 3 天前
回复

使用道具 举报

19#
 楼主| 发表于 3 天前 | 只看该作者
本帖最后由 倒垃圾的歌者 于 2024-11-12 19:20 编辑

chatgpt不可全信,我举个例子,比如
  1. :: 检测并设置%SystemVersion%为"Windows 10"
  2. if /i "%SystemVersion:Windows 10=%" neq "%SystemVersion%" (
  3.     set SystemVersion=10
  4. )
复制代码
我这段的意思是如果输出结果中只要包含“10”这个字符串的,就设定系统版本为10,我这明显是Windows10系统,然后你那整段代码少了这个,它告诉我我的系统是XP

点评

根据已知问题进行了修改  详情 回复 发表于 前天 09:29
回复

使用道具 举报

20#
 楼主| 发表于 3 天前 | 只看该作者

你要的话我可以给你改进一下 检测当前系统版本.zip (792 Bytes, 下载次数: 13)

点评

谢谢大佬  详情 回复 发表于 前天 09:57
回复

使用道具 举报

21#
发表于 3 天前 | 只看该作者
感谢分享
回复

使用道具 举报

22#
发表于 3 天前 | 只看该作者
本帖最后由 1G空间100元 于 2024-11-12 19:37 编辑
qitiandashe1020 发表于 2024-11-12 19:18
这个脚本,我的8.1系统判断正确

这个脚本判断是最正确的
会显示 系统版本+发行号大版本号+发行号小版本号
而且PE可用

回复

使用道具 举报

23#
发表于 3 天前 | 只看该作者
感谢分享
回复

使用道具 举报

24#
发表于 3 天前 | 只看该作者
  1. for /f "tokens=2 delims=[]" %%a in ('ver') do for /f "tokens=2-4 delims=. " %%b in ("%%a") do set "ver=%%b%%c"&set "verbuild=%%d"
复制代码
回复

使用道具 举报

25#
发表于 3 天前 | 只看该作者
本帖最后由 fzp070 于 2024-11-12 21:08 编辑

PowerShell判断当前系统版本
  1. write-host "【1】查询PowerShell版本" -ForegroundColor Yellow
  2. $PSVersionTable.PSVersion
  3. write-host "------------------------------------------------------" -ForegroundColor Green

  4. write-host "【2】查询操作系统版本" -ForegroundColor Yellow
  5. Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, BuildNumber
  6. write-host "------------------------------------------------------" -ForegroundColor Green

  7. write-host "【3】查询操作系统版本" -ForegroundColor Yellow
  8. Get-WmiObject Win32_OperatingSystem | Select-Object Caption, Version, BuildNumber
  9. write-host "------------------------------------------------------" -ForegroundColor Green

  10. pause
复制代码


点评

XP没有Powshell,所以无法判断  详情 回复 发表于 3 天前
回复

使用道具 举报

26#
 楼主| 发表于 3 天前 | 只看该作者
fzp070 发表于 2024-11-12 20:57
Powshell判断当前系统版本

XP没有Powshell,所以无法判断

点评

确实!感谢大佬分享批处理,适用Windows各版本。  详情 回复 发表于 3 天前
回复

使用道具 举报

27#
发表于 3 天前 | 只看该作者
学习了,多谢分享
回复

使用道具 举报

28#
发表于 3 天前 | 只看该作者
倒垃圾的歌者 发表于 2024-11-12 21:09
XP没有Powshell,所以无法判断

确实!感谢大佬分享批处理,适用Windows各版本。
回复

使用道具 举报

29#
发表于 3 天前 | 只看该作者
感谢分享,下载保存了
回复

使用道具 举报

30#
发表于 3 天前 | 只看该作者
我觉的windows11就是windows10稍微变动下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-15 11:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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