无忧启动论坛

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

作者: haook    时间: 2021-2-9 08:57
标题: 求自动识别系统WIN7和WIN10,然后自动执行对应的命令?感谢各位大神相助 ! 谢谢大家 !
本帖最后由 haook 于 2021-2-9 08:58 编辑

求自动识别系统WIN7和WIN10,然后自动执行对应的命令?
感谢各位大神相助 ! 谢谢大家 !
作者: magicgenius    时间: 2021-2-9 09:23
ver|find "6." >NUL && set "winos=win7os"
ver|find "10." >NUL && set "winos=win10os"
goto %winos%
:win7os
...
goto end

:win10os
...

:end


作者: 2010wlm    时间: 2021-2-9 10:11
学习了。
作者: l3429900    时间: 2021-2-9 10:15
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
撸主可以搜索SWAI和R4OSV,不满足要求再说
作者: 邪恶海盗    时间: 2021-2-9 10:46
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."?
作者: sanshen3    时间: 2021-2-9 11:38
学习一下
作者: nttwqz    时间: 2021-2-9 11:44
方法一:
@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能正常运行即可。
作者: plusv    时间: 2021-2-9 12:32

@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





作者: 窄口牛    时间: 2021-2-9 12:33
注册表最好
作者: magicgenius    时间: 2021-2-9 17:12
邪恶海盗 发表于 2021-2-9 10:46
10.0.10586.XXX是否会匹配到"6."?

忘了,应该是6.1
ver|find "6.1." >NUL && set "winos=win7os"
作者: magicgenius    时间: 2021-2-9 17:17
其实,查版本还可以用以下方法:

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

作者: CodeHz    时间: 2021-2-9 23:01
给个略微靠谱一点点的,只考虑消费者版本

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 后面的全当娱乐,实测无效(

作者: chshrm    时间: 2021-2-9 23:18
楼上都是批高手,学习一下!
作者: 邪恶海盗    时间: 2021-2-10 00:47
CodeHz 发表于 2021-2-9 23:01
给个略微靠谱一点点的,只考虑消费者版本

setlocal

XP之前的也不见得靠谱
作者: CodeHz    时间: 2021-2-10 01:50
邪恶海盗 发表于 2021-2-10 00:47
XP之前的也不见得靠谱

(我的意思是xp那一行之后的(
作者: 邪恶海盗    时间: 2021-2-10 02:08
CodeHz 发表于 2021-2-10 01:50
(我的意思是xp那一行之后的(

我的意思是XP那一行之前的
作者: dos时代菜鸟    时间: 2021-2-10 11:02
本帖最后由 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

复制代码


作者: sht123960585    时间: 2021-2-14 00:06
如果楼主需要判断的系统只限于简体中文版的话,可以参考以下代码:

  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
复制代码

作者: austere    时间: 2021-2-15 01:01
楼上的都是大神,我来膜拜一下
作者: wom087    时间: 2021-2-22 23:16
这里好多大神,可以好好学习
作者: cjfcjf111    时间: 2021-3-27 15:59
本帖最后由 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中也可判断


作者: nttwqz    时间: 2021-3-27 16:05
cjfcjf111 发表于 2021-3-27 15:59
if not exist "C:\Windows\System32\Boot" echo winxp

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

人多思路广




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