[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 批处理如何精确判断当前系统版本

本帖最后由 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下执行.

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

TOP

在各种系统下输入ver,看看结果。
xp下:
Microsoft Windows XP [版本 5.1.2600]
别的不知了。。。。
楼主可以自己测试,用if判断就行了。

TOP

jm就是通过能否执行set的新特性来区分os的。。。

TOP

  1. @echo off
  2. set /p =<nul 2>nul&&echo 是Win环境||echo 是DOS环境
  3. pause
复制代码
不能在纯DOS下运行的,语法错误.

TOP

  如果只是简单地区分是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
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

谢谢版主,明天找个时间写写看.
不行的话,再来请教大家.

TOP

已经不记得DOS下有多少命令可以用的
自己试试
ver|find "7.1"
if %errorlevel%==0 goto dos
...
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

而且纯DOS环境没有这个%os%变量的.
2楼版主说的VER应该可以,但我不会写.

TOP

在WINXP的命令行里输入echo %os%
输出只是Windows_NT
分不清是WIN2000/XP还是VISTA的,只知道是NT核心.

TOP

楼上版主能帮我写个示范吗?
我还在学习阶段,只会写一些简单的批处理.

TOP

%os%

TOP

ver应该是通用命令吧?
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表