我正在使用 InstallAnywhere,这是一个用于创建安装程序的旧程序。我想安装特定文件,仅适用于 Windows XP 和 Windows Vista。
由于 InstallAnywhere 的限制,这是不可能的。我只能根据规则决定在文件安装后删除它。
在该规则内,我可以检查我正在运行的平台,这使我能够检查 Windows XP、Windows Vista、Windows 7 等,但不能检查 Windows 10。我不能说“在系统不是 XP 或 Vista 时执行此操作”,所以我需要说“在所有不是 XP 或 Vista 的平台上执行此操作”。
但是,我可以启动命令行命令并捕获结果,所以这是我的问题是:是否有一个命令可以用来确定我是否在 Windows 10 系统上工作?
答案1
是否有命令可以确定我是否在 Windows 10 系统上工作?
您可以使用wmic
。
以下命令将返回 Windows 版本。
wmic os get Caption | findstr /v Caption
示例输出:
F:\test>wmic os get Caption | findstr /v Caption
Microsoft Windows 7 Home Premium
如果您需要更多信息,可以使用以下批处理文件(GetOS.cmd),它将检索并显示:
- 操作系统版本
- 服务包主版本
- 架构(64 位或 32 位)
@echo off
setlocal
setlocal enabledelayedexpansion
set _os=
set _sp=
rem use findstr to strip blank lines from wmic output
rem get OS
for /f "usebackq skip=1 tokens=3" %%i in (`wmic os get caption ^| findstr /r /v "^$"`) do (
set "_os=%%i"
)
rem get Service Pack
for /f "usebackq skip=1 tokens=*" %%i in (`wmic os get ServicePackMajorVersion ^| findstr /r /v "^$"`) do (
set "_sp=%%i"
)
rem get Architecture
for /f "usebackq skip=1 tokens=*" %%i in (`wmic OS get OSArchitecture ^| findstr /r /v "^$"`) do (
set "_bits=%%i"
)
echo Operating System Version: %_os%
echo Service Pack Major Version: %_sp%
echo Architecture: %_bits%
endlocal
操作系统版本存储在 中%_os
,服务包主版本存储在 中%_sp%
,而体系结构存储在 中%_bits%
。
笔记:
尚未完全测试,因为我没有所有的操作系统和服务包组合来测试它。
该
for
命令仅检索操作系统的第三部分(令牌)。这将适用于桌面版本(如果您想区分 Server 2008 与其他版本,则需要寻找其他解决方案)。%_os
将被设置为下列值之一:Server
、Vista
、7
、8
或8.1
。10
示例输出:
F:\test>GetOS
Operating System Version: 7
Service Pack Major Version: 1
Architecture: 64-bit
F:\test>
进一步阅读
答案2
我不敢相信这么长时间没有 ver 命令
C:\>ver
Microsoft Windows [Version 10.0.10586]
C:\>
它在重定向中起作用,因此你可以这样做
ver | find "Version 10."
但是您通常应该写“针对此版本和所有未来版本”,因此最好列举之前的版本。
答案3
答案4
我没有使用过 InstallAnywhere,但有两个选项可以使用命令行查看安装了什么操作系统。
使用 Cmd
systeminfo.exe
使用命令
systeminfo.exe
,您可以看到字段下的结果OS Name
。这可能会给您提供比您需要的更多信息。有关此命令的更多信息,请参见微软技术网。
电源外壳
或者,您可以使用以下 Powershell 脚本,它将返回您想要的准确信息。
Get-CimInstance Win32_OperatingSystem | Select-Object Caption | ForEach{ $_.Caption }