无忧启动论坛

标题: 判断当前系统版本-批处理代码测试 [打印本页]

作者: 倒垃圾的歌者    时间: 3 天前
标题: 判断当前系统版本-批处理代码测试
本帖最后由 倒垃圾的歌者 于 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系统通过




作者: qetuo    时间: 3 天前
能不能检测到linux?
作者: 倒垃圾的歌者    时间: 3 天前
qetuo 发表于 2024-11-12 18:34
能不能检测到linux?

这是测试Windows的,我对liunx不了解,抱歉
作者: holley2008    时间: 3 天前
好奇怪

作者: 倒垃圾的歌者    时间: 3 天前
holley2008 发表于 2024-11-12 18:40
好奇怪

可能是Windows10改的
作者: wangyibin    时间: 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
复制代码
代码简化说明

作者: yyz2191958    时间: 3 天前
Windows10  PE 下不行
作者: qitiandashe1020    时间: 3 天前
Windows8.1没有?
作者: 倒垃圾的歌者    时间: 3 天前
yyz2191958 发表于 2024-11-12 18:53
Windows10  PE 下不行

PE本来就是阉割的,为什么去那里运行?
作者: 1G空间100元    时间: 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
作者: 倒垃圾的歌者    时间: 3 天前
qitiandashe1020 发表于 2024-11-12 18:55
Windows8.1没有?

Windows8.1其实就是Windows8系统,8.1不是一个系统大版本
作者: wang1126    时间: 3 天前
谢谢1、6、10楼分享
作者: 倒垃圾的歌者    时间: 3 天前
wangyibin 发表于 2024-11-12 18:52
为了提高可读性和代码结构,你可以考虑简化重复性的 if 条件判断,比如通过 for 循环遍历检测版本信息,减 ...

你用的chatgpt优化的?




作者: hmaaaa    时间: 3 天前
THX~!感恩分享摟,謝謝大大喔~~!辛苦了!^^
作者: 倒垃圾的歌者    时间: 3 天前
hmaaaa 发表于 2024-11-12 19:07
THX~!感恩分享摟,謝謝大大喔~~!辛苦了!^^

你先测试一下有没有用吧
作者: wangyibin    时间: 3 天前
倒垃圾的歌者 发表于 2024-11-12 19:05
你用的chatgpt优化的?

GPT-4o 模型 协助
作者: qitiandashe1020    时间: 3 天前
1G空间100元 发表于 2024-11-12 18:56
楼主的脚本不错
另一个论坛上看到的:

这个脚本,我的8.1系统判断正确
作者: qitiandashe1020    时间: 3 天前
倒垃圾的歌者 发表于 2024-11-12 18:56
Windows8.1其实就是Windows8系统,8.1不是一个系统大版本

原来如此
作者: 倒垃圾的歌者    时间: 3 天前
本帖最后由 倒垃圾的歌者 于 2024-11-12 19:20 编辑
wangyibin 发表于 2024-11-12 19:15
GPT-4o 模型 协助

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

作者: 倒垃圾的歌者    时间: 3 天前
qitiandashe1020 发表于 2024-11-12 19:18
原来如此

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

作者: wn168cn@163.com    时间: 3 天前
感谢分享
作者: 1G空间100元    时间: 3 天前
本帖最后由 1G空间100元 于 2024-11-12 19:37 编辑
qitiandashe1020 发表于 2024-11-12 19:18
这个脚本,我的8.1系统判断正确

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


作者: cxydeity    时间: 3 天前
感谢分享
作者: nttwqz    时间: 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"
复制代码

作者: fzp070    时间: 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
复制代码



作者: 倒垃圾的歌者    时间: 3 天前
fzp070 发表于 2024-11-12 20:57
Powshell判断当前系统版本

XP没有Powshell,所以无法判断
作者: 断剑留痕    时间: 3 天前
学习了,多谢分享
作者: fzp070    时间: 3 天前
倒垃圾的歌者 发表于 2024-11-12 21:09
XP没有Powshell,所以无法判断

确实!感谢大佬分享批处理,适用Windows各版本。
作者: 2012飘水    时间: 3 天前
感谢分享,下载保存了
作者: http88    时间: 3 天前
我觉的windows11就是windows10稍微变动下。
作者: yc2428    时间: 3 天前
感谢分享
作者: 望风的蜗牛    时间: 前天 04:07
感谢分享
作者: AcidBurn    时间: 前天 04:19
谢谢楼主的分享!
作者: ylac    时间: 前天 08:00
收藏,谢谢分享
作者: szwp    时间: 前天 08:14
wangyibin 发表于 2024-11-12 18:52
为了提高可读性和代码结构,你可以考虑简化重复性的 if 条件判断,比如通过 for 循环遍历检测版本信息,减 ...

for /f "tokens=2,3,4 skip=2" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do echo 当前系统为%%b %%c

试试

作者: maykun    时间: 前天 09:08
从代码里看是定义了XP-11之间的系统,如果没被定义到的,如95 ,me,98以及后续要新出的系统是否就不能识别了? 如果只是想知道当前系统,DOS里输入systeminfo就可以显示。要是再根据识别的系统再干点别的那就不会了。
作者: wn168cn@163.com    时间: 前天 09:15
感谢分享
作者: wangyibin    时间: 前天 09:29
倒垃圾的歌者 发表于 2024-11-12 19:19
chatgpt不可全信,我举个例子,比如
我这段的意思是如果输出结果中只要包含“10”这个字符串的,就设定 ...

根据已知问题进行了修改
  1. [url=home.php?mod=space&uid=336905]@echo[/url] 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. for /f "tokens=2* skip=2" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentBuild"') do set BuildVersion=%%b

  12. :: 输出调试信息
  13. echo 检测到的系统版本: %SystemVersion%
  14. echo 检测到的内部版本号: %BuildVersion%

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

  23. :: 未检测到已知版本时的处理
  24. echo 无法检测到已知的 Windows 版本。
  25. goto End

  26. :WinXP
  27. echo.
  28. echo 当前系统为 Windows XP
  29. goto End

  30. :Win7
  31. echo.
  32. echo 当前系统为 Windows 7
  33. goto End

  34. :Win8
  35. echo.
  36. echo 当前系统为 Windows 8
  37. goto End

  38. :Win10
  39. echo.
  40. echo 当前系统为 Windows 10
  41. goto End

  42. :Win11
  43. echo.
  44. echo 当前系统为 Windows 11
  45. goto End

  46. :End
  47. echo.
  48. pause
  49. exit /b
复制代码



作者: qitiandashe1020    时间: 前天 09:57
倒垃圾的歌者 发表于 2024-11-12 19:22
你要的话我可以给你改进一下

谢谢大佬
作者: 孟仁飞    时间: 前天 10:02
学习
作者: jing998    时间: 前天 10:57
感谢分享,下载保存了
作者: zqfeng01    时间: 前天 11:04
感謝分享




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3