【问题标题】:How to create a Condition in batch windows?如何在批处理窗口中创建条件?
【发布时间】:2017-06-09 13:50:45
【问题描述】:

我有一个脚本,我正在尝试创建一个函数来根据系统版本执行一些命令。

要知道我使用哪个版本的 Windows:

systeminfo | Findstr / B / C: "OS Name" / C: "OS Version"> version.txt
set version = <version.txt
del version.txt
echo% version% #(variable test, ok)

我需要以下函数(或多或少像我在 Linux 批处理中那样):

if [echo% version% | Findstr / B / C: "Windows XP"> "0"] {
echo "Windows XP"
}
if [echo% version% | Findstr / B / C: "Windows 7"> "0"] {
echo "Windows 7"
}
if [echo% version% | Findstr / B / C: "Windows 8"> "0"] {
echo "Windows 8"
}
if [echo% version% | Findstr / B / C: "Windows 10"> "0"] {
echo "Windows 10"
}

【问题讨论】:

  • 网络上有成千上万个批处理文件示例,用于识别 Windows 版本。 (我还建议您的将是最慢的,因为 systeminfo 命令需要一些时间才能完成)。也就是说,通常只有在您尝试控制/限制命令时才需要识别操作系统。一旦确定了操作系统,请您向我们提供您的意图,以便我们提出最合适的方法。
  • 我有一个脚本可以自动安装一些软件,有些软件只能在确定的Windows版本中安装。
  • 任何体面的软件安装程序都应该已经能够确定是否满足系统要求。一个 64 位程序应该不能安装在 32 位操作系统上,一个至少需要 Windows 8 的软件应该不能安装在 Windows Vista 上等等......需要做的是确定版本是否大于或等于您的最低版本,而不是确定产品名称。顺便说一句,ver 命令获取的是 cmd.exe 版本而不是操作系统版本。

标签: windows batch-file command-line command-prompt prompt


【解决方案1】:

我更喜欢VER command的这种方法:

@Echo off
For /f "tokens=4,5,6 delims=[]. " %%G in ('ver') Do (set _major=%%G& set _minor=%%H& set _build=%%I) 

Echo Major version: [%_major%]
Echo Minor Version: [%_minor%]
Echo Build: [%_build%]

GOTO sub%_major%-%_minor%

:sub6-0
Echo Windows Vista or Windows 2008
goto next

:sub6-1
Echo Windows 7 or Windows 2008 R2
goto next

:sub6-2
Echo Windows 8 or Windows Server 2012
goto next

:sub6-3
Echo Windows 8.1 or Windows Server 2012
goto next

:sub10-0
:sub10-1
Echo Windows 10 or Windows 2016

:next
Echo Architecture: [%PROCESSOR_ARCHITECTURE%]
pause

或者用这批也可以做到这一点:

@echo off
setlocal
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
if "%version%" == "5.1"     ( set "OS=Windows XP" )
if "%version%" == "5.2"     ( set "OS=Windows XP Professional x64 Edition" )
if "%version%" == "6.0"     ( set "OS=Windows Vista" )
if "%version%" == "6.1"     ( set "OS=Windows 7" )
if "%version%" == "6.2"     ( set "OS=Windows 8" )
if "%version%" == "6.3"     ( set "OS=Windows 8.1" )
if "%version%" == "10.0"    ( set "OS=Windows 10" )

echo OS is "%OS%"
echo The version is "%version%"
endlocal
pause

【讨论】:

  • 我想一个合理的例程应该至少能够确定它是服务器操作系统还是其他。我这样说是因为我认为“5.2”在这两种架构中对 Windows NET Server、Home Server 和 Server 2003 都有效?正如您可以想象的那样,旨在运行不知道 64 位 Windows XP 和 32 位 Windows Server 2003 Datacenter Edition 之间区别的命令的例程可能会出现问题。
【解决方案2】:

你不能在 if 语句中执行命令,你必须使用两行:

ver | find /I "10.0" > nul
if not errorlevel 1 (
  echo Win10
)
ver | find /I "5.1" > nul
if not errorlevel 1 (
  echo WinXP
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2016-12-30
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多