Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Определить разрядность системы и соответственно выполнить скрипт. (http://forum.oszone.net/showthread.php?t=316196)

turbolover 25-06-2016 15:23 2645524

Определить разрядность системы и соответственно выполнить скрипт.
 
Вопрос- как определить разрядность системы, и выполнить соответствующий скрипт.
Так будет правильно?
Код:

@Echo Off
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" "%Systemdrive%\Program Files\Mozilla Firefox\Firefox.exe" -private"
Goto End
:Start_x64
Start "Firefox" "%Systemdrive%\Program Files (x86)\Mozilla Firefox\Firefox.exe" -private"
Goto End
:End


Foreigner 25-06-2016 16:17 2645539

Может просто так?
Код:

start firefox
start iexplore

У меня отрабатывает без путей, хотя в %PATH% не прописаны. Нужно разобраться, что там еще есть в:
Код:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
PS. ключи -private и -privatewindow не отрабатывают, браузер запускается в обычном режиме.

turbolover 25-06-2016 16:22 2645540

Цитата:

Цитата Foreigner
PS. ключи -private и -privatewindow не отрабатывают, браузер запускается в обычном режиме. »

не отрабатывают потому что надо вырубить "Firefox", и потом запускать скрипт.

Foreigner 25-06-2016 16:30 2645544

turbolover, С перезапуском работает. Разрядность можно проверить наличием переменной %ProgramFiles(x86)% или значением %PROCESSOR_ARCHITECTURE%:
Код:

if defined ProgramFiles(x86) echo x64
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" echo x64

Powershell:
Код:

if ([intptr]::size -eq 8) { 'x64' }

Iska 25-06-2016 16:51 2645550

Foreigner, есть ещё зависимость из-под какой подсистемы исполнять это. Уже обсуждалось ранее.

Foreigner 25-06-2016 17:12 2645552

Iska, С %PROCESSOR_ARCHITECTURE% согласен. Но %ProgramFiles(x86)% зависит не от подсистемы, а от разрядности системы.

Iska 25-06-2016 17:46 2645558

Foreigner, вообще-то, по большому, гамбургскому счёту — нет, не зависит. Точнее, только наличие данного каталога не даёт абсолютной гарантии, что ОС — x64.

Foreigner 25-06-2016 19:49 2645578

Iska, да и наличие каталога не дает гарантии.. Наверное нет решения )))

Iska 25-06-2016 22:01 2645603

Ну, меня вариант коллеги gora в принципе устраивает.

greg zakharov 26-06-2016 10:07 2645654

А как на счет определения разрядности системы по типу explorer.exe? В смысле прочитать поле MachineType самого PE:
Код:

@echo off
  setlocal enabledelayedexpansion
    rem получаем полный путь до explorer.exe
    for %%i in (explorer.exe) do (
      if exist "%%~$PATH:i" (
        rem ищем в PE поле e_lfanew структуры IMAGE_DOS_HEADER
        rem длина поля равна четырем байтам, смещение 0x3C
        for %%j in (C D E F) do (
          for /f "tokens=2" %%k in (
            'fc /b "%%~$PATH:i" "%~f0" ^| findstr /rc:"03%%j:"'
          ) do set "ofs=%%k!ofs!"
        )
        rem пропускаем сигнатуру PE\x00\x00
        set /a "ofs=0x!ofs!+4"
        rem получаем адреса двух байтов поля MachineType
        rem структуры IMAGE_FILE_HEADER и создаем из них
        rem строку - эдакий regexp для findstr
        for /l %%j in (0, 1, 1) do (
          cmd /c exit /b !ofs!
          set "str=!str!!=exitcode! "
          set /a "ofs+=1"
        )
        rem читаем значения поля MachineType
        for /f "tokens=2" %%j in (
          'fc /b "%%~$PATH:i" "%~f0" ^| findstr "!str:~0,-1!"'
        ) do set "mt=%%j!mt!"
        if "!mt!" equ "014C" echo:x86
        if "!mt!" equ "8664" echo:x64
      )
    )
  endlocal
exit /b

А если не усложнять:
Код:

wmic os get osarchitecture

alpap 26-06-2016 14:28 2645715

А так?
Код:

@echo off
for /f "tokens=2 delims=:" %%a in ('"systeminfo|more +14|set/p x=^& cmd/v/c echo !x: =!"') do echo %%a|find/i "x86" && echo x86
pause>nul

.


Время: 22:17.

Время: 22:17.
© OSzone.net 2001-