Пакет для определения, является ли система 32-разрядной или 64-разрядной
Кто-нибудь знает, как создать пакетный файл, который может использовать оболочку для одной программы, если ее 64-разрядная система или оболочка другой, если ее 32-разрядная система?
Ответы
Ответ 1
Проверить %PROCESSOR_ARCHITECTURE%
на x86
:
if %PROCESSOR_ARCHITECTURE%==x86 (
rem 32 bit
) else (
rem 64 bit
)
По крайней мере, пока. На сервере у меня есть доступ к нему AMD64
, но не знаю, как выглядит Itanium, например. Но 32-разрядные версии всегда сообщают x86
.
Другой вариант, который также работает на WoW64:
for /f "skip=1 delims=" %%x in ('wmic cpu get addresswidth') do if not defined AddressWidth set AddressWidth=%%x
if %AddressWidth%==64 (
rem 64 bit
) else (
rem 32 bit
)
Ответ 2
Он работает и без WMI!
Я предлагаю:
@echo off
if /i "%processor_architecture%"=="AMD64" GOTO AMD64
if /i "%PROCESSOR_ARCHITEW6432%"=="AMD64" GOTO AMD64
if /i "%processor_architecture%"=="x86" GOTO x86
GOTO ERR
:AMD64
rem do amd64 stuff
GOTO EXEC
:x86
rem do x86 stuff
GOTO EXEC
:EXEC
rem do arch independent stuff
GOTO END
:ERR
@echo Unsupported architecture "%processor_architecture%"!
pause
:END
Ответ 3
uname -a #for mac
uname -i #for ubuntu
Ответ 4
И простой способ - проверить наличие папки %SystemRoot%\SysWOW64
. Хотя он не на 100% надежный, он действительно хорош для обнаружения, является ли система 64-разрядной.
Ответ 5
Все пакеты там не работают в моей Windows 8 x64.
После работы со мной:
@cd %programfiles(x86)%\
@if %ERRORLEVEL% == 0 (echo x64&&pause)
@if %ERRORLEVEL% == 1 (echo x86&&pause)
Ответ 6
Эта строка даст вам то, что вы хотите, работает на XP, Vista и 7
сохранить его как .bat или .cmd
If Defined ProgramFiles(x86) (\\Fileserver\Distribution\Softwarex64.exe) else (\\Fileserver\Distribution\Softwarex86.exe)
Если источник установки на локальной машине просто указывает на него (D:\Programs\Softwarex64.exe)
и если вы хотите просто запускать команды, а не устанавливать, просто введите команду, которую вы хотите для x64. Между first() и командами для x86 Между вторым()
If Defined ProgramFiles(x86) (ipconfig /all & @echo This Is A 64-bit System ) else (arp -a & @echo This Is A 32-bit System)
Скопируйте это в CMD, чтобы проверить его
Я надеюсь, что это поможет
Ответ 7
прочитайте это.
http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx
Ответ 8
В Linux вы можете просто использовать "arch" в командной строке.
ubuntu# arch
x86_64
В OSX (Snow Leopard) возвращается "i386", даже если вы на 64-битном оборудовании.
Ответ 9
Этот метод должен быть довольно надежным, так как он будет работать, даже если переменные окружения были испорчены:
rem If no kernel32.dll in System32, probably running on DOS or 16-bit Windows
if not exist "%SystemRoot%\System32\kernel32.dll" goto DOS
rem If no kernel32.dll in SysWOW64, likely a 32-bit Windows
if not exist "%SystemRoot%\SysWOW64\kernel32.dll" goto WIN32
rem If file size reported for kernel32.dll located in System32 and SysWOW64 is
rem the same, it likely means that System32 is being redirected to SysWOW64.
rem This would be the case for 32-bit version of cmd.exe running on 64-bit OS.
for %%I in ("%SystemRoot%\SysWOW64\kernel32.dll") do (
for %%J in ("%SystemRoot%\System32\kernel32.dll") do (
if "%%~zI" equ "%%~zJ" goto WOW64
)
)
rem If we get this far, the script is likely running in native 64-bit console
echo Native shell on 64-bit Windows
rem ...
exit /b
:WOW64
echo 32-bit shell on 64-bit Windows (WOW64)
rem ...
exit /b
:WIN32
echo 32-bit Windows
rem ...
goto END
:DOS
echo DOS or 16-bit Windows
rem ...
goto END
rem ...
:END
rem We can put this label at the end of the file to allow exiting script on
rem older systems that do not support 'exit /b'
Этот метод основан на том, что "% WINDIR%\System32\kernel32.dll" должен присутствовать во всех системах Windows. 64-разрядные версии Windows также содержат каталог "% WINDIR%\SysWOW64", содержащий 32-битные версии системных файлов, которых нет в 32-разрядных системах.
В 64-битных системах 32-разрядные приложения перенаправляются на SysWOW64 при попытке доступа к файлам в System32. Таким образом, если мы получаем тот же размер kernel32.dll как с System32, так и с SysWOW64, это означает, что перенаправление действует, а наш script работает в 32-битной консоли в 64-разрядной ОС.