1

Тема: CMD/BAT: Определение сигнатуры ОС

Сам практически не разбираюсь в батниках, подскажите, если не затруднит, что показывает вот такой батник на Windows-NT системах, реагирует ли на переменную окружения %OS% ?

@echo off

@if "%OS%" == "Windows_NT" goto OSNT
@goto OS9X

:OSNT
@echo Windows_NT
@goto end

:OS9X
@echo Chicago
:end

2

Re: CMD/BAT: Определение сигнатуры ОС

Показывает:

Windows_NT

Реагирует:

echo [%OS%]

Результат:

[Windows_NT]

3

Re: CMD/BAT: Определение сигнатуры ОС

Большое спасибо!

4 (изменено: jite, 2010-09-27 05:39:48)

Re: CMD/BAT: Определение сигнатуры ОС

А вот как отличить, скажем, Winows 7 от XP? Есть какой-нибудь более изящный способ, чем ниже?

@echo off
set res=%ALLUSERSPROFILE% | find "ProgramData"
if "%res%" neq "" (
rem win 7
set def_u_p=%homedrive%\Users\Default\ntuser.dat
) else (
rem win XP, 2000, ...
set def_u_p="%homedrive%\Documents and Settings\Default User\ntuser.dat"
)
echo %def_u_p%

5

Re: CMD/BAT: Определение сигнатуры ОС

Есть. Win32_OperatingSystem Class:

wmic.exe os get caption

6

Re: CMD/BAT: Определение сигнатуры ОС

Ух, спасибо! Богатая поляна у wmic! Про WMI конечно известно, но как-то не ожидал, что можно взять вот так просто, после обилия букв в WSH.

7

Re: CMD/BAT: Определение сигнатуры ОС

Можете ли вы предложить сценарий, чтобы определить, какая операционная система, и если XP запустить 1.vbs скрипт и если Windows 7 запустить другой сценарий 2.vbs и если Vista запустить 3.vbs ....

8

Re: CMD/BAT: Определение сигнатуры ОС

Проще слепить всё в единый сценарий VBS, наподобие:

Option Explicit

Dim objSWbemObjectEx

With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    For Each objSWbemObjectEx In .ExecQuery("SELECT Caption FROM Win32_OperatingSystem WHERE Primary = True")
        'WScript.Echo objSWbemObjectEx.Caption
        
        Select Case objSWbemObjectEx.Caption
            Case "Microsoft Windows XP Professional", "Microsoft Windows XP Home Edition"
                Call Windows_XP
            Case "-= Place here Captions from Windows Vista =-"
                Call Windows_Vista
            Case "-= Place here Captions from Windows 7 =-"
                Call Windows_7
            Case Else
                ' Nothing to do
        End Select
    Next
End With

WScript.Quit 0

Sub Windows_XP
    ' Place here scenario from 1.vbs
    WScript.Echo "Place here scenario from 1.vbs"
End Sub

Sub Windows_Vista
    ' Place here scenario from 2.vbs
    WScript.Echo "Place here scenario from 2.vbs"
End Sub

Sub Windows_7
    ' Place here scenario from 3.vbs
    WScript.Echo "Place here scenario from 3.vbs"
End Sub

Как выглядят «Caption» в случае «Vista» и «Windows 7» — не знаю, добавьте их в сценарий сами, перечислив возможные значения в соответствующих «Case …» через запятую.

9 (изменено: Евген, 2010-10-14 19:03:52)

Re: CMD/BAT: Определение сигнатуры ОС

Microsoft Windows 7 Максимальная

Думаю по Caption не пойдёт...    у семёрки этих разновидностей....     
ИМХО может как-то по версии ядра лучше ?:/
а не интересует заодно x86 или x64 ?

For Each objOS in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
WScript.Echo "Version = " & objOS.Version  & vbcrlf & "Architecture = " & objOS.OSArchitecture
Next

Вот ссылка на нумерацию ядер

Времени не хватает... :-(

10 (изменено: jite, 2010-10-14 19:11:00)

Re: CMD/BAT: Определение сигнатуры ОС

С регулярными выражениями типа такого вполне пойдёт:

/^\S+\s\S+\s7\s.+$/ig

Это значит "Начало Слово Пробел Слово Пробел 7 Пробел Все-что-угодно Конец".
Upd Туплю-туплю! Мы же в пакетном файле а не под WSH!

Можно и версию посмотреть:

wmic.exe os get version

Под XP даст что-то вроде "5.1.2600", под 7 - "6.1.7600". Vista, насколько помню, должна определяться как 6.0.чего-то-там
B пожалуй да - по версии судить будет легче.

Кстати, удобно смотреть, что еще можно нарыть с помощью следующего .cmd:

set alias=OS
wmic.exe %alias% list >> %alias%.txt

Алиасы см. "wmic /?"

11

Re: CMD/BAT: Определение сигнатуры ОС

Евген пишет:

а не интересует заодно x86 или x64 ?

Это, конечно, хорошо, но:

OSArchitecture

Architecture of the operating system, as opposed to the processor.

Note: Windows Server 2003, Windows 2000, Windows NT 4.0, Windows XP, and Windows Me/98/95:  This property is not available.

а это 90% всех машин.

jite пишет:

Под XP даст что-то вроде "5.1.2600", под 7 - "6.1.7600"
B пожалуй да - по версии судить будет легче.

Оттуда же:

Windows 7     6.1.7600
Windows Server 2008 R2 (ранее известна как Windows Server 7) 6.1.7600

Есть и другие совпадения.

12 (изменено: jite, 2010-10-14 20:34:25)

Re: CMD/BAT: Определение сигнатуры ОС

Windows 7     6.1.7600
Windows Server 2008 R2 (ранее известна как Windows Server 7) 6.1.7600

Спасибо, что предупредили! Это  действительно так
Видимо, [странному] Microsoft это [побоку], как частенько бывает...
Что же делать?
Случаев, когда важны сразу платформа, версия, архитектура, сервер/нет ли, и чтобы это все в .cmd, наверное, не так уж и много. А в редких таковых придется строить громоздкие конструкции, улавливающие все особенности или делать консольную утилиту с реализацией на языке более высокого уровня, чтобы не морочиться с cmd.
****!

13

Re: CMD/BAT: Определение сигнатуры ОС

вмик не канает, ибо недозволен простым смертным по дефолту, да и в винХП-дом отсутствует как класс, стрый дедовский метод вернее
(особо умные скажут - зафига такое спагетти, когда можно упростить - для совместимости) может есть касяки, лениво вспоминать и тестить

echo off
ver | find " 9"
if not errorlevel 1 goto win9x
ver | find " 5."
if not errorlevel 1 goto win2k
ver | find " 6."
if not errorlevel 1 goto vista
ver | find " 7."
if not errorlevel 1 goto win7
echo XZ!
goto next
:win9x
echo win9x
goto next
:win2k
echo win2k
goto next
:vista
echo vista
goto next
:win7
echo win7
:next
Я конечно далек от мысли... (с)

14

Re: CMD/BAT: Определение сигнатуры ОС

B правда, совсем забыл про ver!

15

Re: CMD/BAT: Определение сигнатуры ОС

jite пишет:

B правда, совсем забыл про ver!

ver в семерке возвращает: Microsoft Windows [Version 6.1.7600]

16 (изменено: Dmitrii, 2010-10-15 07:37:41)

Re: CMD/BAT: Определение сигнатуры ОС

ver в Server 2003 R2 Std. 32bit вернёт 5.2.xxxx, а в Server 2008 Std. 32bit - 6.0.xxxx

17 (изменено: Dmitrii, 2010-11-15 12:47:26)

Re: CMD/BAT: Определение сигнатуры ОС

Ради интереса проверил, что вернёт VER в следующих вариантах (все 32bit, русифицированные):
- XP Home + SP2: 5.1.2600;
- XP Pro. + SP3: 5.1.2600;
- Vista Bus. без SP: 6.0.6000;
- Vista Bus. + SP1: 6.0.6001;
- Vista Bus. + SP2: 6.0.6002
- 2008 Std. + SP2: 6.0.6002.