Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何判断批处理文件运行的windows和/或cmd.exe版本?_Windows_Cmd - Fatal编程技术网

如何判断批处理文件运行的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% 它保存的命令扩

如何确定批处理文件运行的Windows和/或cmd.exe版本

我找不到任何
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