Войти

Показать полную графическую версию : [решено] Как проверить разрядность операционной системы?


Страниц : 1 2 [3] 4 5 6

gora
26-02-2013, 15:35
SystemInfo | find "x64-based PC" »
Этот прием не годится.
1 SystemInfo отрабатывает достаточно долго, что вызовет общую задержку в работе скрипта.
2 Посмотрите внимательно вывод SystemInfo, Вы обнаружите в нем несколько строк, которые задаются пользователем, например:
Имя узла: GORA-ПК
Зарегистрированный владелец: gora
Зарегистрированная организация:
Ни кто не помешает пользователю задать вместо gora, например, My dream is x64-based PC на х86 ОС. Тогда Ваш парсинг выдаст, что у этого пользователя x64 уже установлена! "Мечты сбываются"? :yahoo:

7ka
26-02-2013, 15:56
gora, ну так-то оно так :happy: вот только сам пользователь знал бы еще об этом...
хорошо, не спорю, ваша взяла))) тогда вопрос: определить архитектуру пк и запустить соответствующие приложения, можно как-то уместить в одну строку?
..буду признателен!

gora
26-02-2013, 17:24
Set xOS=x64& (If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86)& Call start "" /wait msiexec /i"%~dp0setup-%%xOS%%.msi" /quiet /norestart

7ka
26-02-2013, 17:59
gora, отлично, спасибо!
небольшая поправка:
Set xOS=x64& (If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86)& Call start "" /wait msiexec /i"%~dp0\setup-%%xOS%%.msi" /quiet /norestart
а ведь придется имена файлов привязывать к команде в скрипте? например если в команде указан файл "setup-%%xOS%%.msi", файл должен быть с именем "setup-x86.msi" или "setup-x64.msi" т.е. что я хочу этим сказать - сама команда не может подстраиваться под имена файлов и искать в их заголовке только указанные значения/символы, типа (х86 или х64)?!

gora
26-02-2013, 18:15
небольшая поправка: »
Слеш в этом месте я умышленно выбросил из Вашей строки, ибо %~dp0 уже содержит завершающий слеш.а ведь придется имена файлов привязывать к команде в скрипте? »
Совершенно необязательно, вот пример:
для х86 файл - 32-bit\install.msi
для x64 файл - AMD64\setup.msi Set xOS=AMD64\setup.msi& (If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=32-bit\install.msi)& Call start "" /wait msiexec /i"%~dp0%%xOS%%" /quiet /norestart

7ka
26-02-2013, 19:04
Слеш в этом месте я умышленно выбросил из Вашей строки, ибо %~dp0 уже содержит завершающий слеш. »
:blush2: прошу прощения, не подумал...
Совершенно необязательно, вот пример:
для х86 файл - 32-bit\install.msi
для x64 файл - AMD64\setup.msi »
т.е. я правильно понимаю, если исполняемый, командный файл, в моем случаи "RunScript.cmd" с телом Set xOS=AMD64\setup.msi& (If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=32-bit\install.msi)& Call start "" /wait msiexec /i"%~dp0%%xOS%%" /quiet /norestart который находиться в одной директории с пакетными файлами, к примеру:
- cdbxp_setup_x86_4.5.0.3717.msi
- cdbxp_setup_x64_4.5.0.3717.msi
при запуске из другого интерпретатора определит битность ОС и выполнит соответствующие приложение, определив в имени файла переменную "x64 или x86"?

gora
26-02-2013, 19:28
который находиться в одной директории с пакетными файлами, к примеру:
- cdbxp_setup_x86_4.5.0.3717.msi
- cdbxp_setup_x64_4.5.0.3717.msi »
Пакетными файлами принято называть .bat или .cmd файлы, а Вы это о чем? о .msi файлах?моем случаи "RunScript.cmd" с телом
Код:
Set xOS=AMD64\setup.msi& (If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=32-bit\install.msi)& Call start "" /wait msiexec /i"%~dp0%%xOS%%" /quiet /norestart »
Судя по именам инсталяторов, Вам лучше использовать строку из поста 43, а не из 45. Хотя я так и не понял необходимости в батнике все запихивать в одну строку, это ж не командная строка...при запуске из другого интерпретатора »
Что значит "другой интерпретатор"? О чем речь?

7ka
26-02-2013, 20:37
gora, дабы не офтопить ответил в пм

7ka
29-03-2013, 22:32
gora, подскажите, возможно ли объединить в один пакетный файл определение сразу нескольких параметров и исходя из этого выполнять ту или иную задачу, а именно: определение версии/разрядности ОС'ь
интересует именно определение ОС: 7 или 8 и их разрядность

gora
29-03-2013, 22:51
@Echo Off
Set Tip=UNKNOWN
Reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | Find "Windows 7" >nul
If "%ERRORLEVEL%"=="0" Set Tip=Win7
Reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | Find "Windows 8" >nul
If "%ERRORLEVEL%"=="0" Set Tip=Win8

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

Echo %%xOS%% - %xOS%
Echo %%Tip%% - %Tip%
Pause

7ka
29-03-2013, 23:29
gora, прошу прощения, я немного не так выразился, требуется что-то на подобие такой структуры:

gora
29-03-2013, 23:56
Так?@Echo Off
Set Tip=UNKNOWN
Reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | Find "Windows 7" >nul
If "%ERRORLEVEL%"=="0" Set Tip=Win7
Reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | Find "Windows 8" >nul
If "%ERRORLEVEL%"=="0" Set Tip=Win8

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

Echo %%xOS%% - %xOS%
Echo %%Tip%% - %Tip%
If %Tip%==UNKNOWN Exit
If %Tip%==Win7 (
If %xOS%==x64 (
Echo setup_7_64.exe
) Else (
Echo setup_7_32.exe
)
)
If %Tip%==Win8 (
If %xOS%==x64 (
Echo setup_8_64.exe
) Else (
Echo setup_8_32.exe
)
)
Pause

7ka
30-03-2013, 08:31
gora, да, это то что нужно. Премного благодарен.

У меня еще один вопрос к вам, понимаю что не в этой теме, да простят меня боги))
Возможно ли как-то заставить команду robocopy отображать только процент копирования в окне пакетного файла? Заранее спасибо!

Survover
04-02-2015, 13:05
Сделал так все работает ! А как правильно прописать файл конфигурации в Модифицированном SFX модуле 7-Zip ?




@echo off

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

IF %xOS%==x86 ( "setup_x86.exe" /S) else ( "setup_x64.exe" /S)
pause
exit

gora
04-02-2015, 13:12
Survover, для таких вопросов есть ветка: .: Файлы конфигурации 7z SFX. Помощь и советы :. (http://forum.oszone.net/thread-230888.html)

RunProgram="%%P:hidcon:cmd /c setup_%%P.exe &Pause"

Survover
04-02-2015, 13:15
Спс

Beliy.IV
02-03-2018, 11:15
Ребят подскажите, а как закрыть окно cmd?
что только не пробовал, и пауза выход и просто выход и эхо.

Запуская программу с сетевой папки - Mem_Reduct, нужно самому закрывать cmd или же нажимать выход в программе и тогда командная строка закрывается

Andrey_Vladimirovich
03-02-2021, 06:06
С определением разрядности ОС всё оказалось как-то запутанно и неопределённо. Например, в моей Win 10 x64 переменная "PROCESSOR_ARCHITECTURE" имеет значение "AMD64", а "PROCESSOR_ARCHITEW6432" не определена. Может, вместо второй использовать переменную "ProgramW6432"? В общем, вот, что я нашёл по этому вопросу (комментарий одного из пользователей одного ресурса):

@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

alpap
03-02-2021, 13:36
по обеим переменным и определяется:
Cmd:

rem Определение разрядности системы
set arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" (
if not defined PROCESSOR_ARCHITEW6432 (
set arch=x86
)
)
echo %arch%
pause

Powershell:

function Get-OsArch {
# Определение архитектуры системы
[string]$arch = "amd64"
if ($env:PROCESSOR_ARCHITECTURE -eq "x86") {
if (!$env:PROCESSOR_ARCHITEW6432) {$arch = "x86"}
}
return $arch
}
Get-OsArch


Для версии ОС, если надо:
Powershell:

function Get-OsVers {
# Определение версии системы
[string[]]$VerArray = ((Get-WmiObject -class Win32_OperatingSystem).Version).split(".")
$osver = $VerArray[0] + "." + $VerArray[1]
return $osver
}
Get-OsVers

YuS_2
03-02-2021, 14:40
С определением разрядности ОС всё оказалось как-то запутанно и неопределённо. »
>nul 2>&1 set ProgramFiles(x86)&&set xOS=x64||set xOS=x86
и проверяйте состояние переменной %xOS%




© OSzone.net 2001-2012