在批处理文件中获取Windows版本
在批处理文件中获取Windows版本
我需要用批处理文件获取操作系统版本。我在网上看到了很多示例,其中很多使用了如下代码:\n
@echo off ver | find "XP" > nul if %ERRORLEVEL% == 0 goto ver_xp if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit systeminfo | find "OS Name" > %TEMP%\osname.txt FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i echo %vers% | find "Windows 7" > nul if %ERRORLEVEL% == 0 goto ver_7 echo %vers% | find "Windows Vista" > nul if %ERRORLEVEL% == 0 goto ver_vista goto warnthenexit :ver_7 :Run Windows 7 specific commands here. echo Windows 7 goto exit :ver_vista :Run Windows Vista specific commands here. echo Windows Vista goto exit :ver_xp :Run Windows XP specific commands here. echo Windows XP goto exit :warnthenexit echo Machine undetermined. :exit
\n问题是,当我在Vista或Windows 7上执行时,我得到了以下消息:\n
\n机器无法确定\n
\n有没有其他方法可以实现我想要的功能?
问题的出现原因:该问题的出现是因为需要在批处理文件中获取Windows版本号。
解决方法:以下是获取Windows版本号的一些批处理命令。
1. 从cmd控制台中提取版本号x.y:
for /f "tokens=4-7 delims=[.] " %i in ('ver') do @(if %i==Version (echo %j.%k) else (echo %i.%j))
2. 提取完整版本号x.y.z:
for /f "tokens=4-7 delims=[.] " %i in ('ver') do @(if %i==Version (echo %j.%k.%l) else (echo %i.%j.%k))
3. 在批处理脚本中使用%%代替单个%:
@echo off for /f "tokens=4-7 delims=[.] " %%i in ('ver') do (if %%i==Version (set v=%%j.%%k) else (set v=%%i.%%j)) echo %v%
需要注意的是,提取的版本号并不总是与Windows名称对应。以上是从维基百科中列出的一些Microsoft Windows版本的示例。
请注意,这个问题的解决方法受到了Agent Gibbs和peterbh的启发。
问题的出现原因是需要在批处理文件中获取Windows版本号,并根据版本号进行相应的操作。解决方法是通过解析ver
命令的输出来获取版本号,并使用if
语句进行判断和操作。
以下是解决方法的具体步骤:
1. 使用ver
命令获取Windows版本号的输出。
2. 使用setlocal
命令开启局部环境变量。
3. 使用for
循环和tokens
和delims
参数解析版本号字符串,将第4个和第5个字段分别赋值给VERSION
变量。
4. 使用if
语句根据版本号判断Windows的版本,并进行相应的操作。
5. 使用endlocal
命令结束局部环境变量。
需要注意的是,该方法无法区分Windows的服务器版本和消费者版本。要正确处理Windows XP,需要修改delims
参数,将其设置为"delims=[.XP "
。这是因为Windows XP的版本号输出中包含了"XP"字符串。同时需要注意在"XP"之后有一个空格,空格是必需的。
在这个解决方法中,还有一些疑问需要解决。例如,将delims
修改为"delims=[.XP "
是否会影响Win7/8的检测?是否仍然需要包含tokens=4-5
?正确的代码行是什么?
可以参考MSDN上的表格来确定版本号与Windows产品版本的对应关系。这个表格解释了为什么6.1代表Windows 7。
通过以上步骤,可以在批处理文件中获取Windows版本号,并根据版本号进行相应的操作。