haook 发表于 2021-2-9 08:57:57

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

本帖最后由 haook 于 2021-2-9 08:58 编辑

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

magicgenius 发表于 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

2010wlm 发表于 2021-2-9 10:11:41

学习了。

l3429900 发表于 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."?

sanshen3 发表于 2021-2-9 11:38:49

学习一下{:1_193:}

nttwqz 发表于 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 ''') do set ver=%%Q.%%R
echo %ver%
pause
方法二需要WMIC支持,如果你从未运行过WMIC命令,XP上首次运行时会自动安装WMIC,此时识别速度稍慢,第二次以后无此问题,Win7以上无此问题。方法一只需要cmd能正常运行即可。

plusv 发表于 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




窄口牛 发表于 2021-2-9 12:33:48

注册表最好

magicgenius 发表于 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"

magicgenius 发表于 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"

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

chshrm 发表于 2021-2-9 23:18:17

楼上都是批高手,学习一下!

邪恶海盗 发表于 2021-2-10 00:47:07

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

setlocal


XP之前的也不见得靠谱

CodeHz 发表于 2021-2-10 01:50:04

邪恶海盗 发表于 2021-2-10 00:47
XP之前的也不见得靠谱

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

邪恶海盗 发表于 2021-2-10 02:08:20

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

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

dos时代菜鸟 发表于 2021-2-10 11:02:43

本帖最后由 dos时代菜鸟 于 2021-2-10 11:13 编辑

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


@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=4,5 delims=[. " %%c in ('ver ') do (
    set "ver_x=%%c"
    set "ver_y=%%d"
)
set run=0
if !ver_x! equ 6( if !ver_y! equ 1 (
    set run=1
    call:win7
))
if !ver_x! equ 10 (
    set run=1
    call:win10
)
if !run! equ 0call:error1
goto :eof

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

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

:Error1
    echo 不支持非win7/10系列.
    pause
    exit /b
:end_error1


sht123960585 发表于 2021-2-14 00:06:02

如果楼主需要判断的系统只限于简体中文版的话,可以参考以下代码:

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

:win10
相关代码
goto eof

:win7
相关代码
goto eof

austere 发表于 2021-2-15 01:01:05

楼上的都是大神,我来膜拜一下

wom087 发表于 2021-2-22 23:16:07

这里好多大神,可以好好学习

cjfcjf111 发表于 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中也可判断

nttwqz 发表于 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. ...

人多思路广
页: [1]
查看完整版本: 求自动识别系统WIN7和WIN10,然后自动执行对应的命令?感谢各位大神相助 ! 谢谢大家 !