CMD/BAT - [решено] Как проверить разрядность операционной системы?

Ответить
Аватара пользователя
SvoiLudi

CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение SvoiLudi »

Как проверить разрядность операционной системы?



У виндоуз 7 есть 2 версии: 64-х разрядная и 32-х разрядная.



Для 64-х разрядной нужно, чтобы выполнялись дополнительные программы. Как это сделать в коммандом файле?
Аватара пользователя
SvoiLudi

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение SvoiLudi »

в реестре ветки добавляются у 64-х, но как проверить?
Аватара пользователя
SvoiLudi

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение SvoiLudi »

День добрый! Подскажите как на основе выше приведенного примера запустить программу driver install.ехе исходя из розрядности из папки х86 или х64?
Аватара пользователя
SvoiLudi

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение SvoiLudi »

Цитата Andrey_Vladimirovich:



Например, в моей Win 10 x64 переменная "PROCESSOR_ARCHITECTURE" имеет значение "AMD64", а "PROCESSOR_ARCHITEW6432" не определена.



Позвольте вам объяснить причину не с точки зрения кофейной гущи, а - кода Windows. Переменная окружения PROCESSOR_ARCHITECTURE - это значение поля wProcessorArchitecture структуры
SYSTEM_INFO
. Перейдя по ссылке, вы прочтёте следующее:


Цитата docs.microsoft.com:



The processor architecture of the installed operating system.



Таким образом, если 32-битная система работает на базе процессора x64 архитектуры, значение переменной будет x86 (или 0), а потому прочие проверки в общем излишни. SYSTEM_INFO формируется на основе различных системных данных, в частности значение wProcessorArchitecture является значением поля NativeProcessorArchitecture структуры KUSER_SHARED_DATA (смещение 0x26A). Таким образом, однозначно идентифицировать битность системы можно в pwsh так:



Код:

Код: Выделить всё

[Runtime.InteropServices.Marshal]::ReadInt16([IntPtr]0x7FFE026A)

9 - x64, 0 - x86 и т.д.

Что касается ещё более низкого уровня - лучше смотреть в сторону сегментных регистров.
Аватара пользователя
SvoiLudi

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение SvoiLudi »

PATH %PATH%;q:;w:;e:;r:;t:;y:;u:;i:;o:;p:;a:;s:;d:;f:;g:;h:;j:;k:;l:;z:\;x:;c:;v:;b:;n:;m:;

"%WINDIR%\regedit.exe" /s 32x.reg

Set xOS=x86

If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64

if "%xOS%"=="x64" "%WINDIR%\regedit.exe" /s 64x.reg



в реестр ничего не добавляет, а если убрать /s то предлагает добавить в реестр, что требует действия пользователя, что неудобно. Как убрать запрос?

64x.reg находится на сетевом диске z:\
Аватара пользователя
SvoiLudi

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение SvoiLudi »

SvoiLudi, на форуме
Цитата:



темы организуются по
принципу
''одна проблема – одна тема''.



На Ваш вопрос в заголовке темы ответ уже дан, для нового вопроса откройте новую тему и постарайтесь его правильно сформулировать, примерно так: "Как на 64-разрядной системе внести данные из reg файла, находящегося на сетевом диске z:\, в реестр с помощью bat файла запущенного (откуда? с правами администратора?) в 32 (64)-разрядной среде? Reg файл прикрепил."
Аватара пользователя
Elven

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение Elven »

Извините, если не в тему, но не получается корректно обработать запуск программы в зависимости от разрядности системы

Пример:



PHP код:

Код: Выделить всё

@ECHO OFF

SET ProgName=WinRar

SET ProgVer=4.20 Beta 3

SET FileNameX86=wrar420b3ru.exe

SET FileNameX64=winrar-x64-420b3ru.exe

SET FileName=

SET PFPath=

TITLE %ProgName% %ProgVer%



CLS

COLOR 1A



IF EXIST "%ProgramFiles(x86)%" (

    IF DEFINED FileNameX64 (

        SET FileName=%FileNameX64%

        SET PFPath=%PROGRAMFILES%

    ) ELSE (

        SET FileName=%FileNameX86%

        SET PFPath=%PROGRAMFILES(x86)%

    )

) ELSE (

    SET FileName=%FileNameX86%

    SET PFPath=%PROGRAMFILES%

)



ECHO Импорт настроек

ECHO.

regedit /S Settings.reg

ECHO.



START /WAIT %FileName% /S



ECHO Установка завершена

ECHO. 






Задача: создать почти универсальный установочный bat-файл. Менять только значение переменных в самом начале

В данном скрипте почему-то съедается скобка в пути у Programm Files (x86
Аватара пользователя
gora

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение gora »

Цитата vcrank:



почему-то съедается скобка в пути у Programm Files (x86
CMD/BAT - [решено] Как проверить разрядность операционной системы?




Попробуйте так:



Код:

Код: Выделить всё

@ECHO OFF
SET ProgName=WinRar
SET ProgVer=4.20 Beta 3
SET FileNameX86=wrar420b3ru.exe
SET FileNameX64=winrar-x64-420b3ru.exe
SET FileName=
SET PFPath=
TITLE %ProgName% %ProgVer%
CLS
COLOR 1A
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES(x86)%
IF %xOS%==x64 (
    IF DEFINED FileNameX64 (
        SET FileName=%FileNameX64%
        SET PFPath=%PROGRAMFILES%
    )
) ELSE (
    SET FileName=%FileNameX86%
    SET PFPath=%PROGRAMFILES%
)
ECHO PFPath=%PFPath%
ECHO FileName=%FileName%
Pause
Аватара пользователя
seriych

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение seriych »

Цитата gora:



Попробуйте так:
CMD/BAT - [решено] Как проверить разрядность операционной системы?




На системе X86 выдёт

всё как и положено, а вот на x64

Выдёт всё равно путь и имя файла как для системы x86 (Program Files (x86) и wrar420b3ru.exe)



Такое ощущение, что условие ELSE срабатывает в любом случае

Пока делаю костыль с добавлением GoTo
Аватара пользователя
SvoiLudi

Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?

Сообщение SvoiLudi »

PATH %PATH%;q:;w:;e:;r:;t:;y:;u:;i:;o:;p:;a:;s:;d:;f:;g:;h:;j:;k:;l:;z:\;x:;c:;v:;b:;n:;m:;

"%WINDIR%\regedit.exe" /s 32x.reg

Set xOS=x86

If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64

if "%xOS%"=="x64" "%WINDIR%\regedit.exe" /s 64x.reg



в реестр ничего не добавляет, а если убрать /s то предлагает добавить в реестр, что требует действия пользователя, что неудобно. Как убрать запрос?

64x.reg находится на сетевом диске z:\
Ответить

Вернуться в «Скриптовые языки администрирования Windows»