无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 8106|回复: 24

[求助] 求自动识别系统WIN7和WIN10,然后自动执行对应的命令?感谢各位大神相助 ! 谢谢大家 !

[复制链接]
发表于 2021-2-9 08:57:57 | 显示全部楼层 |阅读模式
本帖最后由 haook 于 2021-2-9 08:58 编辑

求自动识别系统WIN7和WIN10,然后自动执行对应的命令?
感谢各位大神相助 ! 谢谢大家 !
发表于 2021-2-9 09:23:43 | 显示全部楼层
ver|find "6." >NUL && set "winos=win7os"
ver|find "10." >NUL && set "winos=win10os"
goto %winos%
:win7os
...
goto end

:win10os
...

:end

点评

10.0.10586.XXX是否会匹配到"6."?  详情 回复 发表于 2021-2-9 10:46
谢谢,好批处理  详情 回复 发表于 2021-2-9 10:15
这就是微软为啥跳过windows 9(  发表于 2021-2-9 09:36
精彩而简洁的批处理  发表于 2021-2-9 09:27
回复

使用道具 举报

发表于 2021-2-9 10:11:41 | 显示全部楼层
学习了。
回复

使用道具 举报

发表于 2021-2-9 10:15:04 | 显示全部楼层
magicgenius 发表于 2021-2-9 09:23
ver|find "6." >NUL && set "winos=win7os"
ver|find "10." >NUL && set "winos=win10os"
goto %winos%

谢谢,好批处理
回复

使用道具 举报

发表于 2021-2-9 10:44:49 | 显示全部楼层
撸主可以搜索SWAI和R4OSV,不满足要求再说
回复

使用道具 举报

发表于 2021-2-9 10:46:59 | 显示全部楼层
magicgenius 发表于 2021-2-9 09:23
ver|find "6." >NUL && set "winos=win7os"
ver|find "10." >NUL && set "winos=win10os"
goto %winos%

10.0.10586.XXX是否会匹配到"6."?

点评

忘了,应该是6.1 ver|find "6.1." >NUL && set "winos=win7os"  详情 回复 发表于 2021-2-9 17:12
回复

使用道具 举报

发表于 2021-2-9 11:38:49 | 显示全部楼层
学习一下
回复

使用道具 举报

发表于 2021-2-9 11:44:28 来自手机 | 显示全部楼层
方法一:
@echo off
for /f 'tokens=2 delims=[' %%Q in ('ver') do for /f 'tokens=2,3 delims=. ' %%R in ('%%Q') do set ver=%%R.%%S
echo %ver%
pause
方法二:
@echo off
for /f 'tokens=1,2 delims=. ' %%Q in ('wmic os get version ^| findstr '[0-9]'') do set ver=%%Q.%%R
echo %ver%
pause
方法二需要WMIC支持,如果你从未运行过WMIC命令,XP上首次运行时会自动安装WMIC,此时识别速度稍慢,第二次以后无此问题,Win7以上无此问题。方法一只需要cmd能正常运行即可。
回复

使用道具 举报

发表于 2021-2-9 12:32:57 | 显示全部楼层

@echo off
FOR /F "tokens=4 delims=. " %%i in ('ver') do (
if %%i equ 6 Goto :Win7
if %%i equ 10 Goto :Win10
)
:Win7
echo This is Win7
Goto :EOF
:Win10
echo This is Win10
Goto :EOF


123.png

回复

使用道具 举报

发表于 2021-2-9 12:33:48 来自手机 | 显示全部楼层
注册表最好
回复

使用道具 举报

发表于 2021-2-9 17:12:34 | 显示全部楼层
邪恶海盗 发表于 2021-2-9 10:46
10.0.10586.XXX是否会匹配到"6."?

忘了,应该是6.1
ver|find "6.1." >NUL && set "winos=win7os"
回复

使用道具 举报

发表于 2021-2-9 17:17:53 | 显示全部楼层
其实,查版本还可以用以下方法:

dir /b %Windir%\servicing\Version|find "6.1." >NUL &&  set "winos=win7os"
dir /b %Windir%\servicing\Version|find "10.0." >NUL &&  set "winos=win10os"
回复

使用道具 举报

发表于 2021-2-9 23:01:02 | 显示全部楼层
给个略微靠谱一点点的,只考虑消费者版本

setlocal
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
if "%version%" == "10.0" echo Windows 10
if "%version%" == "6.3" echo Windows 8.1
if "%version%" == "6.2" echo Windows 8.
if "%version%" == "6.1" echo Windows 7.
if "%version%" == "6.0" echo Windows Vista.
if "%version%" == "5.2" echo Windows XP (x64).
if "%version%" == "5.1" echo Windows XP.
if "%version%" == "5.0" echo Windows 2000.
if "%version%" == "4.90" echo Windows Me.
if "%version%" == "4.10" echo Windows 98.
if "%version%" == "4.00" echo Windows 95.
if "%version%" == "3.2" echo Windows 3.2.
if "%version%" == "3.11" echo Windows for Workgroups 3.11.
if "%version%" == "3.10" echo Windows 3.1.
if "%version%" == "3.00" echo Windows 3.0.
if "%version%" == "2.11" echo Windows 2.11.
if "%version%" == "2.10" echo Windows 2.10.
if "%version%" == "2.03" echo Windows 2.03.
if "%version%" == "1.04" echo Windows 1.04.
if "%version%" == "1.03" echo Windows 1.03.
if "%version%" == "1.02" echo Windows 1.02.
if "%version%" == "1.01" echo Windows 1.0.
(XP 后面的全当娱乐,实测无效(

点评

XP之前的也不见得靠谱  详情 回复 发表于 2021-2-10 00:47
回复

使用道具 举报

发表于 2021-2-9 23:18:17 | 显示全部楼层
楼上都是批高手,学习一下!
回复

使用道具 举报

发表于 2021-2-10 00:47:07 | 显示全部楼层
CodeHz 发表于 2021-2-9 23:01
给个略微靠谱一点点的,只考虑消费者版本

setlocal

XP之前的也不见得靠谱

点评

(我的意思是xp那一行之后的(  详情 回复 发表于 2021-2-10 01:50
回复

使用道具 举报

发表于 2021-2-10 01:50:04 | 显示全部楼层
邪恶海盗 发表于 2021-2-10 00:47
XP之前的也不见得靠谱

(我的意思是xp那一行之后的(

点评

我的意思是XP那一行之前的  详情 回复 发表于 2021-2-10 02:08
回复

使用道具 举报

发表于 2021-2-10 02:08:20 | 显示全部楼层
CodeHz 发表于 2021-2-10 01:50
(我的意思是xp那一行之后的(

我的意思是XP那一行之前的
回复

使用道具 举报

发表于 2021-2-10 11:02:43 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2021-2-10 11:13 编辑

无非是 文本流 在脚本编辑中的处理和运用。
计算机 输出一个文本信息,人能看懂的信息,再返给计算机让计算机做些什么。
涉及到的 无非就是 判断语句,变量赋值语句,循环语句,显示语句之类的。
要说 cmd 下,最直接的就是用 ver 命令,获取 cmd 版本,不同版本的 nt 框架 cmd 版本不一样。
需要注意的是 cmd 下的 if 语句只能对比 整数。


  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /f "tokens=4,5 delims=[. " %%c in ('ver ') do (
  4.     set "ver_x=%%c"
  5.     set "ver_y=%%d"
  6. )
  7. set run=0
  8. if !ver_x! equ 6  ( if !ver_y! equ 1 (
  9.     set run=1
  10.     call:win7
  11. ))
  12. if !ver_x! equ 10 (
  13.     set run=1
  14.     call:win10
  15. )
  16. if !run! equ 0  call:error1
  17. goto :eof

  18. :win7
  19.     echo 此处运行 win7 相关代码.
  20. exit /b
  21. :end_win7

  22. :win10
  23.     echo 此处运行 win10 相关代码.
  24. exit /b
  25. :end_win10

  26. :Error1
  27.     echo 不支持非win7/10系列.
  28.     pause
  29.     exit /b
  30. :end_error1

复制代码

回复

使用道具 举报

发表于 2021-2-14 00:06:02 | 显示全部楼层
如果楼主需要判断的系统只限于简体中文版的话,可以参考以下代码:

  1. @echo off
  2. ver | find "版本 10.0." && goto win10
  3. ver | find "版本 6.1." && goto win7
  4. goto eof

  5. :win10
  6.   相关代码
  7. goto eof

  8. :win7
  9.   相关代码
  10. goto eof
复制代码
回复

使用道具 举报

发表于 2021-2-15 01:01:05 来自手机 | 显示全部楼层
楼上的都是大神,我来膜拜一下
回复

使用道具 举报

发表于 2021-2-22 23:16:07 | 显示全部楼层
这里好多大神,可以好好学习
回复

使用道具 举报

发表于 2021-3-27 15:59:22 | 显示全部楼层
本帖最后由 cjfcjf111 于 2021-3-27 18:29 编辑

if not exist "C:\Windows\System32\Boot" echo winxp

for %%i in ("C:\Windows\System32\Boot\winload.exe") do if %%~zi LSS 80000 echo win7

for %%i in ("C:\Windows\System32\Boot\winload.exe") do if %%~zi GEQ 80000 echo win10

由于WIN7和WIN10中的winload.exe大小有明显的区别,用这个分别,百分百不会错,也没有什么版本号上会有相同而错判的可能,因为是详细的路径,则能够在PE中也可判断

点评

人多思路广  详情 回复 发表于 2021-3-27 16:05
回复

使用道具 举报

发表于 2021-3-27 16:05:13 来自手机 | 显示全部楼层
cjfcjf111 发表于 2021-3-27 15:59
if not exist "C:\Windows\System32\Boot" echo winxp

for %%i in ("C:\Windows\System32\Boot\winload. ...

人多思路广
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-18 13:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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