2009-11-24 6 views
14

Làm cách nào để xác định phiên bản Windows và/hoặc cmd.exe một tệp bó nào đang chạy?làm thế nào để biết phiên bản của cửa sổ và/hoặc cmd.exe một tập tin thực thi đang chạy trên?

Không có cmd /version mà tôi đã có thể tìm thấy và kết quả SET trong một dấu nhắc lệnh không cho bất cứ điều gì rõ ràng là duy nhất (giữa XP và Win7 anyway).

+0

tập tin thực thi từ MS cho [Làm thế nào để xác định loại hệ điều hành trong một logon script] (http://support.microsoft.com/?kbid=190899), chỉ bao gồm W95, NT, 2000, Enterprise NT. –

+0

tập lệnh này từ SS64 hoạt động từ W9x qua XP, nhưng * không * XPx64 hoặc Win7 x64 - http://ss64.com/nt/ver.html –

+0

đoạn mã reg.exe để truy xuất phiên bản #: {{{reg query " HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion "/ v CurrentVersion}}} –

Trả lời

7

Phiên bản cmd.exenên thực sự khá không liên quan, trừ khi bạn cố gắng sử dụng các tính năng không tồn tại trước đó (ví dụ: command.com). Có pseudovariable

%cmdextversion% 

giữ phiên bản của các tiện ích mở rộng lệnh đã 2 tuổi (ít nhất là về NT 4, iirc).

Nhưng, trở lại điểm: Chạy ver và phân tích các chuỗi phiên bản có thể là lựa chọn tốt nhất của bạn:

for /f "tokens=2 delims=[]" %%x in ('ver') do set WINVER=%%x 
set WINVER=%WINVER:Version =% 
+0

cảm ơn bạn đã chỉ cho tôi đúng hướng và cho tôi một sự khởi đầu đẩy. Đó là một trợ giúp lớn! –

2

Nhập "ver" tại dấu nhắc lệnh.

Lần sau, vì điều này không thực sự liên quan đến lập trình nhưng máy chủ hoặc người dùng có liên quan, bạn có thể thử serverfault.com hoặc superuser.com.

+0

Tôi nghĩ về điều đó nhưng có một bộ sưu tập lớn hơn nhiều tập tin batch Q & A ở đây hơn là trên một trong các trang web đó. Các kịch bản không hoàn toàn lập trình và không thể nói chính xác là không lập trình được. Trong mọi trường hợp, cảm ơn câu trả lời. Tôi biết nó là một cái gì đó đơn giản. –

+2

Tôi sẽ không nói rằng các câu hỏi hàng loạt ngay lập tức phải đi đến SF hoặc SU. Chúng thuộc về khá tốt. – Joey

+0

Johannes; nếu một cái gì đó được gắn thẻ "cmd" và "Windows", tôi không thể không điều SF hoặc SU. :-) –

3

Tôi tìm thấy một cách ngắn sử dụng ver cũng như:

... 
ver | find "5.1" 
if %ERRORLEVEL% == 0 goto ver_winxp 
... 

chí này tìm XP, thay thế chuỗi bằng các phiên bản mong muốn của bạn

0

Lệnh nội bộ ver báo cáo số phiên bản Windows (mà có thể đã được học bằng cách gõ help tại dấu nhắc lệnh).

Có một số dynamic variable%CMDEXTVERSION% nhưng chưa phát triển trong một số bản phát hành, vì vậy chỉ hữu ích để phân định between Windows NT and Windows 2000 and newer. (. Cảm ơn @Joey, here)

Dưới đây là một lô để phân tích đầu ra của ver cho XP và mới hơn, lịch sự của Simon Sheppard:

@echo off 
Setlocal 
:: Get windows Version numbers 
For /f "tokens=2 delims=[]" %%G in ('ver') Do (set _version=%%G) 

For /f "tokens=2,3,4 delims=. " %%G in ('echo %_version%') Do (set _major=%%G& set _minor=%%H& set _build=%%I) 

Echo Major version: %_major% Minor Version: %_minor%.%_build% 

if "%_major%"=="5" goto sub5 
if "%_major%"=="6" goto sub6 

Echo unsupported version 
goto:eof 

:sub5 
::Winxp or 2003 
if "%_minor%"=="2" goto sub_2003 
Echo Windows XP [%PROCESSOR_ARCHITECTURE%] 
goto:eof 

:sub_2003 
Echo Windows 2003 or xp 64 bit [%PROCESSOR_ARCHITECTURE%] 
goto:eof 

:sub6 
if "%_minor%"=="1" goto sub7 
Echo Windows Vista or Windows 2008 [%PROCESSOR_ARCHITECTURE%] 
goto:eof 

:sub7 
Echo Windows 7 or Windows 2008 R2 [%PROCESSOR_ARCHITECTURE%] 
goto:eof 

Và đây là của riêng khá hoàn chỉnh, phần lớn học tập, đá của tôi tại có thể trả về số phiên bản phân tích cú pháp như biến môi trường:

@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 
15

bạn có thể sử dụng "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 
+0

Điều này cung cấp thông tin đầy đủ. Rất tiện dụng. – RBT

1

Có thể ai đó sẽ cần những điều sau đây để xác định SKU (Win7). Tôi đang sử dụng một số tập lệnh này để chọn đúng HĐH và XML trong sysprep. Hy vọng điều đó sẽ hữu ích!

@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 
+0

Cảm ơn bạn đã sử dụng tập lệnh có thể sử dụng được, mặc dù tôi rất tiếc khi bán bất kỳ thứ gì vào thư mục gốc của C: và sẽ sử dụng '% temp% \ sysinfo' thay thế. –

7

Tôi tìm thấy một cách ngắn sử dụng ver cũng như:

Có thể thậm chí ngắn hơn:

ver | find "5.1" >nul && goto ver_winxp 
+0

Cảm ơn! Đã có thể được tốt hơn để thêm này như là một bình luận để http://stackoverflow.com/a/11102816/14420 hơn làm cho một bài mới. –