Board logo

标题: [系统相关] 批处理如何精确判断当前系统版本 [打印本页]

作者: semiuel    时间: 2008-11-8 22:50     标题: 批处理如何精确判断当前系统版本

本帖最后由 pcl_test 于 2016-7-16 10:16 编辑

如题.
一般我们碰到的系统包括OS,WIN98,WIN2000,WINXP,WIN2003,VISTA,可能还有WIN2008
要求在批处理程序里判断,然后执行相应语句.

比方说我在DOS下运行这个批处理程序,它能判断出来我是在DOS下运行,并执行DOS下的语句.
我在WINXP下运行,它能判断出来是在WINXP下.


我在可启动U盘里放了一些批处理程序,功能差不多,但在不同的环境下执行的命令不一样.我的目的是判断当前系统环境是DOS还是WIN2000/XP后执行相应的代码,这样就可以少几个文件.

很多批处理程序里的命令可以在WIN2000/XP下执行,但不能在DOS下执行.
作者: zqz0012005    时间: 2008-11-8 23:16

ver应该是通用命令吧?
作者: rat    时间: 2008-11-8 23:18

%os%
作者: semiuel    时间: 2008-11-8 23:20

楼上版主能帮我写个示范吗?
我还在学习阶段,只会写一些简单的批处理.
作者: semiuel    时间: 2008-11-8 23:21

在WINXP的命令行里输入echo %os%
输出只是Windows_NT
分不清是WIN2000/XP还是VISTA的,只知道是NT核心.
作者: semiuel    时间: 2008-11-8 23:22

而且纯DOS环境没有这个%os%变量的.
2楼版主说的VER应该可以,但我不会写.
作者: zqz0012005    时间: 2008-11-8 23:31

已经不记得DOS下有多少命令可以用的
自己试试
ver|find "7.1"
if %errorlevel%==0 goto dos
...
作者: semiuel    时间: 2008-11-8 23:42

谢谢版主,明天找个时间写写看.
不行的话,再来请教大家.
作者: namejm    时间: 2008-11-9 12:22

  如果只是简单地区分是DOS环境还是Win环境的话就比较好办,并且方法也不只限于ver一种;如果还要知道系统的具体版本的话,那就没什么比较通用的办法了,除非借助第三方命令行工具,比如 string 之类,因为纯DOS下的 for 没有 /f 开关。

  如果只需要区分DOS和Win环境,那么,可以这样做:找个Win环境下有而DOS下没有的命令运行之,然后,通过返回的错误码加以判断,或者直接用&&加||的组合判断。比如:
  1. @echo off
  2. set /p =<nul 2>nul&&echo 是Win环境||echo 是DOS环境
  3. pause
复制代码

作者: semiuel    时间: 2008-11-9 16:29

  1. @echo off
  2. set /p =<nul 2>nul&&echo 是Win环境||echo 是DOS环境
  3. pause
复制代码
不能在纯DOS下运行的,语法错误.
作者: BBCC    时间: 2008-11-9 16:47

jm就是通过能否执行set的新特性来区分os的。。。
作者: Cameron    时间: 2008-11-10 13:16

在各种系统下输入ver,看看结果。
xp下:
Microsoft Windows XP [版本 5.1.2600]
别的不知了。。。。
楼主可以自己测试,用if判断就行了。
作者: hedgehog    时间: 2008-11-13 20:35

用msinfo32.exe试试
  1. start /wait msinfo32.exe /report c:\1.txt /categories swenv+SWENvenvservices &&type c:\1.txt&&del c:\1.txt
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2