Показать полную графическую версию : [решено] Как проверить разрядность операционной системы?
Какая-то ерунда снова получается. В прошлый раз не всё проверил.
Имеется батник:
@ECHO OFF
SET ProgName=AIMP
SET ProgVer=3.10 RC2 build 1051
SET FileNameX86=AIMP3.exe
SET FileNameX64=
SET FileName=
SET PFPath=
TITLE %ProgName% %ProgVer%
CLS
COLOR 1A
CALL :_Set_Var
ECHO В какой каталог поставить приложение:
ECHO.
ECHO.
ECHO [1] %PFPath%\%ProgName%
ECHO [2] D:\UserData\Programs\%ProgName%
ECHO.
ECHO.
SET /p sert="Нажмите соответствующий номер:"
IF '%sert%'=='1' (
SET PFPath=%PFPath%\%ProgName%
) ELSE IF '%sert%'=='2' (
SET PFPath=D:\UserData\Programs\%ProgName%
) ELSE IF ErrorLevel 0 GoTo :END
%FileName% -d"%PFPath%" -s2
reg add hklm\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AIMP3 /v UninstallString /t REG_SZ /F /d "%PFPath%\Uninstall.exe"
:_Set_Var
SET xOS=x86
IF Defined PROCESSOR_ARCHITEW6432 (
SET xOS=x64
) ELSE IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" SET xOS=x64
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES%
IF %xOS%==x86 GoTo :EOF
SET PFPath=%PROGRAMFILES(x86)%
IF Not DEFINED FileNameX64 GoTo :EOF
SET FileName=%FileNameX64%
SET PFPath=%ProgramW6432%
GoTo :EOF
:END
Если запускать на x86, то выполняется без проблем
Если запускать на x64, то появляется ошибка: Непредвиденное появление: \AIMP
http://rghost.ru/38913743/image.png
vcrank, а так?
@ECHO OFF
SET ProgName=AIMP
SET ProgVer=3.10 RC2 build 1051
SET FileNameX86=AIMP3.exe
SET FileNameX64=
SET FileName=
SET PFPath=
TITLE %ProgName% %ProgVer%
CLS
COLOR 1A
CALL :_Set_Var
ECHO В какой каталог поставить приложение:
ECHO.
ECHO.
ECHO [1] %PFPath%\%ProgName%
ECHO [2] D:\UserData\Programs\%ProgName%
ECHO.
ECHO.
Set fPFPath=
SET /p sert="Нажмите соответствующий номер:"
IF '%sert%'=='1' SET fPFPath=%PFPath%\%ProgName%
IF '%sert%'=='2' SET fPFPath=D:\UserData\Programs\%ProgName%
IF Not Defined fPFPath GoTo :END
Echo %FileName% -d"%fPFPath%" -s2
Echo reg add hklm\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AIMP3 /v UninstallString /t REG_SZ /F /d "%fPFPath%\Uninstall.exe"
Pause
Exit
:_Set_Var
SET xOS=x86
IF Defined PROCESSOR_ARCHITEW6432 (SET xOS=x64) ELSE IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" SET xOS=x64
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES%
IF %xOS%==x86 GoTo :EOF
SET PFPath=%PROGRAMFILES(x86)%
IF Not DEFINED FileNameX64 GoTo :EOF
SET FileName=%FileNameX64%
SET PFPath=%ProgramW6432%
GoTo :EOF
:END
Echo Error
Pause
Exit
gora, а так? »
Извините, что долго не отвечал. Так работает. Будем работать дальше :) Вдруг ещё что-то всплывёт
Фильтры и поиск (http://tools.oszone.ru/Vadikan/faq.html#filters)
[решено] Как проверить разрядность операционной системы? (http://forum.oszone.net/thread-172610.html) Всё это видел. Тема (http://forum.oszone.net/thread-238370.html) не решена.
Продолжу вопрос здесь.
Привет. Кто подскажет как запустить setup.exe в соответствии с разрядностью системы? Код по проще можно?
Нужен только запуск.
Например
@ echo
run setup.exe x86
run setup.exe x64
как это сделать?
L1nk3R, а посмотреть на код gora парой постов выше и проявить смекалку сложно?
SET xOS=x86
IF Defined PROCESSOR_ARCHITEW6432 (SET xOS=x64) ELSE IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" SET xOS=x64
IF %xOS%==x86 (run setup.exe x86) else (run setup.exe x64)
sov44, я в батнике мало что понимаю.
Данная тема соответствует больше вот этому примеру:
@echo off
Title Проверка разрядности операционной системы
echo Архитектура вашего процессора: %PROCESSOR_ARCHITECTURE%
pause
sov44, не работает, пишет ""run" не является внутренней или внешней командой, исполняемой программой или пакетным файлом."
пишет ""run" не является внутренней или внешней командой »
Всё верно. В скобках указывайте только путь и имя запускаемой программы без "run", "x86" и т.п. Если в имени и (или) в пути есть пробелы, заключайте путь с именем в кавычки.
sov44, Спасибо добрый человек за помощь! Всё работает :).
gen0m.rsw
30-09-2012, 10:18
Всем участникам форума респект!!!
Ближе к делу!
Батник должон , определить разрядность ОС, и запустить надлежащий EXE(или MSI), с параметром
К примеру :
x86 setup_x86.exe /S
или
x64 setup_x64.msi /qn
Заранее спасибо!!!
gen0m.rsw, попробуй как-то так:
@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 ("x64 setup_x64.msi" /qn)
pause
exit
Ещё один, более короткий, вариант записи определения разрядности, предложенной в посте 3.Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
А я так:
Set xOS=x86
IF EXIST %windir%\Sysnative\* Set xOS=x64
Определение из 32 битного приложения
DesmondTruman
16-10-2012, 20:27
Set xOS=x86 If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
copy "test.exe" "%systemroot%\system32\test.exe" /y
copy "test.exe" "%systemroot%\system64\test.exe" /y
Вот нужно к примеру исходя из переменной xOS использовать соответствующий путь (system32\system64). Как более элегантно их соединить не используя call?
исходя из переменной xOS использовать соответствующий путь (system32\system64) »
Скажите, пожалуйста, что Вы называете соответствующим путем и что такое system64? Если это SysWOW64, то укажите, где должен оказаться test.exe в 64 битной системе, - в system32 (64 битная среда) или в SysWOW64 (32 битная)?
angel_lyucifer
16-01-2013, 05:05
Привет, мне нужен батник который определяет разрядность системы x86 или x64 если система 32 битная, то есть x86 то тогда нужно запустить файл 1.exe если система 64 битная то есть x64 тогда нужно запустить файл 2.exe
Кто может подскажите варианты такого батника пожалуйста.
@echo off
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
1.exe
goto check_done
:os64
2.exe
:check_done
del StringCheck.txt, CheckOS.txt
Стучим в бубен ))) (http://gedemin.blogspot.ru/2010/11/32-64-bat.html)
angel_lyucifer
16-01-2013, 17:13
Спасибо zion87!
2ALL
@Echo Off
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Install_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Install_x64
Goto End
:Install_x86
start "" /wait msiexec /i"%~dp0\setup-x86.msi" /quiet /norestart
Goto End
:Install_x64
start "" /wait msiexec /i"%~dp0\setup-x64.msi" /quiet /norestart
Goto End
:End
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Install_x86 »
1 Символ ! здесь применен, видимо, для "экономии" на кавычках, которые традиционно используются в таких случаях:If "%PROCESSOR_ARCHITECTURE%"=="x86" Goto Install_x86 Прием известный, но символ выбран крайне неудачно, т.к., является спец. символом, что в ряде случаев может привести к сбоям в работе скрипта, например при наличии строки в начале скрипта:SetLocal EnableDelayedExpansion
2 По одной переменной PROCESSOR_ARCHITECTURE нельзя определить разрядность системы однозначно! У меня на Win7 x64 она равна x86 - при запуске скрипта в х86 среде (из x86 ТС, например) и AMD64 - при запуске скрипта в х64 среде (из x64 ТС, например).
Это скорее определение среды запуска скрипта, нежели разрядности ОС.
gora, есть еще такой прием:
@Echo off
SystemInfo | find "x64-based PC"
if ERRORLEVEL 1 Goto Tre
:Ses
start "" /wait msiexec /i"%~dp0\setup-x64.msi" /quiet /norestart
Goto Quiet
:Tre
start "" /wait msiexec /i"%~dp0\setup-x86.msi" /quiet /norestart
:Quit
:End
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.