29 нояб. 2010 г.

32 или 64? Определение разрядности ОС из bat файла

Чтобы из пакетного файла определить какая операционная система установлена приходится буквально стучать в бубен и взывать к духам предков:

set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
reg.exe Query %RegQry% > checkOS.txt
find /i "x86" < CheckOS.txt > StringCheck.txt

if %ERRORLEVEL% == 0 (
goto os32
) else (
goto os64
)

:os32
rem do something here
goto check_done

:os64
rem OS is 64 bit

:check_done
del StringCheck.txt
del CheckOS.txt

3 комментария:

A2 комментирует...

Всё гораздо проще.

@echo off
cls

rem Источник: http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx

rem При наличии переменной PROCESSOR_ARCHITEW6432 система 64-х битная, но работает в режиме 32-х битной эмуляции.

rem PROCESSOR_ARCHITECTURE — переменнная, содержащая информацию об архитектуре процессора (возможные варианты: x86, IA64, AMD64).

rem 1) PROCESSOR_ARCHITECTURE==x86 и PROCESSOR_ARCHITEW6432 не определена — 32-х разрядная система;

rem 2) PROCESSOR_ARCHITECTURE==AMD64 и PROCESSOR_ARCHITEW6432 не определена — 64-х разрядная система на базе x64, программа запущена в родном режиме (64-х битном);

rem 3) PROCESSOR_ARCHITECTURE==IA64 и PROCESSOR_ARCHITEW6432 не определена — 64-х разрядная система на базе Itanium, программа запущена в родном режиме (64-х битном);

rem 4) PROCESSOR_ARCHITECTURE==x86 и PROCESSOR_ARCHITEW6432==AMD64 — 64-х разрядная система на базе x64, программа запущена в режиме x86;

rem 5) PROCESSOR_ARCHITECTURE==x86 и PROCESSOR_ARCHITEW6432==IA64 — 64-х разрядная система на базе Itanium, программа запущена в режиме эмуляции x86.

rem echo run test windows x64 or x32

if defined PROCESSOR_ARCHITEW6432 (goto LABEL_X64)
if %PROCESSOR_ARCHITECTURE%==IA64 (goto LABEL_X64)
if %PROCESSOR_ARCHITECTURE%==AMD64 (goto LABEL_X64)
if %PROCESSOR_ARCHITECTURE%==x86 (goto LABEL_X86)
goto LABEL_NON

:LABEL_X64
echo OS type: x64
goto LABEL_END

:LABEL_X86
echo OS type: x86
goto LABEL_END

:LABEL_NON
echo OS type: undefined
goto LABEL_END

:LABEL_END
pause

Анонимный комментирует...

Set P=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set P=x86
Echo %P%

Анонимный комментирует...

можно еще проще :)
IF ESIXT %systemdrive%\program files (x86) goto x64
:x64

Отправить комментарий