如何判断批处理文件运行的windows和/或cmd.exe版本?
如何确定批处理文件运行的Windows和/或cmd.exe版本 我找不到任何如何判断批处理文件运行的windows和/或cmd.exe版本?,windows,cmd,Windows,Cmd,如何确定批处理文件运行的Windows和/或cmd.exe版本 我找不到任何cmd/version,在命令提示符会话中设置的结果没有给出任何明显的唯一性(在XP和Win7之间)。在命令提示符下键入“ver” 下一次,由于这与编程无关,而是与服务器或用户相关,您可以尝试serverfault.com或superuser.com。cmd.exe的版本实际上应该是非常不相关的,除非您尝试使用以前不存在的功能(例如在command.com中)。这是伪变量 %cmdextversion% 它保存的命令扩
cmd/version
,在命令提示符会话中设置的结果没有给出任何明显的唯一性(在XP和Win7之间)。在命令提示符下键入“ver”
下一次,由于这与编程无关,而是与服务器或用户相关,您可以尝试serverfault.com或superuser.com。cmd.exe的版本实际上应该是非常不相关的,除非您尝试使用以前不存在的功能(例如在
command.com
中)。这是伪变量
%cmdextversion%
它保存的命令扩展的版本已经有2年了(至少可以追溯到NT4,iirc)
但是,回到正题:运行ver
并解析版本字符串可能是最好的选择:
for /f "tokens=2 delims=[]" %%x in ('ver') do set WINVER=%%x
set WINVER=%WINVER:Version =%
我还找到了一种使用
ver
的较短方法:
...
ver | find "5.1"
if %ERRORLEVEL% == 0 goto ver_winxp
...
这将找到XP,用您想要的版本替换字符串内部命令
ver
报告windows版本号(可以通过在命令提示下键入help
来了解)
有一个%CMDEXTVERSION%
,但它在几个版本中都没有进展,所以它只用于描述。(谢谢@Joey,)
下面是一个批处理,用于解析ver for XP及更新版本的输出,由以下人员提供:
下面是我自己的一个相当完整的,主要是学术性的,可以返回解析后的版本号作为环境变量:
@echo off
setlocal
:: from http://ss64.org/viewtopic.php?pid=3136#p3136
::==================================
::variables
if %PROCESSOR_ARCHITECTURE%==x86 set pro_arch=32 Bit (x86)
if %PROCESSOR_ARCHITECTURE%==AMD64 set pro_arch=64 Bit (AMD64)
if %PROCESSOR_ARCHITECTURE%==IA64 set pro_arch=Itanium 64 Bit (IA64)
:Main
call :clean
for /f "tokens=2 delims=[]" %%x in ('ver') do set cmdver=%%x
set cmdver=%cmdver:Version =%
call :parse_cmdver
call :ver%cmdver%
call :Report
goto :End
:clean
:: Ensure we don't inherit values from previous runs
set _verCmd=
set _verMajor=
set _verMinor=
set _verBuild=
set _verWin=
goto :eof
:Parse_cmdver
:: Turn "5.1.2306" string into actionable variables
for /f "tokens=1,2,3* delims=." %%g in ("%cmdver%") do (
set major=%%g
set minor=%%h
set build=%%i
)
goto :eof
:Report
echo.
echo. CMD version is %cmdver%
echo. which probably means %longver% %pro_arch%
echo.
goto :eof
:Report2
echo. The numbers are stored in the following variables:
echo.
set _ver
goto :eof
::Table of version numbers built from
:: http://en.wikipedia.org/wiki/Microsoft_Windows#Timeline_of_releases
:ver1.01
set longver=Windows 1.01
set shortver=Win101
goto :eof
:ver2.03
set longver=Windows 2.03
set shortver=Win203
goto :eof
:ver2.10
set longver=Windows 2.10
set shortver=Win21
goto :eof
:ver2.11
set longver=Windows 2.11
set shortver=Win211
goto :eof
:ver3.0
set longver=Windows 3.0
set shortver=Win3
goto :eof
:ver3.1
set longver=Windows 3.1, Windows For Workgroups 3.1, or Windows NT 3.1
set shortver=Win31/WFW31/WinNT31
goto :eof
:ver3.11
set longver=Windows For Workgroups 3.11
set shortver=WFW311
goto :eof
:ver3.2
set longver=Windows 3.2 (released in Simplified Chinese only)
set shortver=Win32ch
goto :eof
:ver3.5
set longver=Windows NT 3.5
set shortver=WinNT35
goto :eof
:ver3.51
set longver=Windows NT 3.51
set shortver=WinNT351
goto :eof
:ver4.0.950
set longver=Windows 95
set shortver=Win95
goto :eof
:ver4.0.1381
set longver=Windows NT 4.0
set shortver=WinNT4
goto :eof
:ver4.90.3000
set longver=Windows Me
set shortver=WinMe
goto :eof
:ver4.10.1998
set longver=Windows 98
set shortver=Win98
goto :eof
:ver4.10.2222
set longver=Windows 98 SE
set shortver=Win98SE
goto :eof
:ver5.0.2195
set longver=Windows 2000
set shortver=Win2K
goto :eof
:ver5.1.2600
set longver=Windows XP or Windows Fundamentals for Legacy PCs
set shortver=WinXP/WinFun
goto :eof
:ver5.2.3790
set longver=Windows XP, Windows XP Pro or Windows Server 2003
set shortver=WinXP/WinXP-Pro/Server2003
goto :eof
:ver5.2.4500
set longver=Windows Home Server
set shortver=WinHomeServer
goto :eof
:ver6.0.6002
set longver=Windows Vista or Windows Server 2008
set shortver=Vista/Server2008
goto :eof
:ver6.1.7600
set longver=Windows 7 or Windows Server 2008 R2
set shortver=Win7/Server2008R2
goto :eof
:End
:: return version to calling shell/script,
:: see http://ss64.com/nt/syntax-functions.html
endlocal & set _verCmd=%cmdver% & set _verMajor=%major% & set _verMinor=%minor% & set _verBuild=%build% & set _verWin=%shortver%
call :Report2 :: comment this line out to suppress extra reporting
您可以使用“systeminfo”@cmd.exe
C:\Users\Tagon8>systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name: Microsoft Windows 8 Release Preview
OS Version: 6.2.8400 N/A Build 8400
可能有人需要以下信息来确定SKU(Win7)。 我在sysprep过程中使用了一些脚本来选择正确的操作系统和XML。 希望有帮助
@echo off
set ver=Unknown
systeminfo > C:\sysinfo
findstr /e /c:"Enterprise " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Enterprise
findstr /e /c:"Ultimate " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Ultimate
findstr /e /c:"Professional " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Professional
findstr /e /c:"Home Premium " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Home Premium
findstr /e /c:"Home Basic " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Home Basic
del /f /q C:\SP\sysinfo 1>nul 2>nul
Echo Windows 7 %ver%
pause
exit
我还发现了一种使用ver的较短方法: 甚至可以更短:
ver | find "5.1" >nul && goto ver_winxp
要使用WMIC查找windows版本,可以使用:
wmic os get version
我想到了这一点,但这里比这两个网站都收集了更多的批量文件问答。脚本并不完全是编程,但也不能说完全不是编程。无论如何,谢谢你的回答。我知道这很简单。我不会说批量问题必须立即转到SF或SU。他们很适合这里;如果某个东西被标记为“cmd”和“Windows”,我会情不自禁地选择SF或SU.:-)MS for的批处理文件,仅涵盖W95、NT、2000、Enterprise NT。SS64中的此脚本可从W9x到XP运行,但不能从XPx64或Win7 x64-reg.exe代码段检索版本:{{{{reg query“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion”/v CurrentVersion}},谢谢您为我指明了正确的方向并为我提供了一个推送启动。真是帮了大忙!感谢您提供了一个可用的脚本,尽管我已经学会了将任何内容转储到C:的根目录,并将使用
%temp%\sysinfo
。谢谢!最好将其添加为评论,而不是发表新文章。输出是本地化的,因此在非英语Windows版本中,将没有“操作系统名称”或“操作系统版本”
wmic os get version