Lot de détecter si le système est 32 bits ou 64 bits

est-ce que quelqu'un sait comment créer un fichier batch qui peut shell un programme si c'est un système 64 bits ou shell un autre si c'est un système 32 bits?

17
demandé sur Sathya 2011-02-14 13:03:01

9 réponses

rechercher %PROCESSOR_ARCHITECTURE% étant x86:

if %PROCESSOR_ARCHITECTURE%==x86 (
  rem 32 bit
) else (
  rem 64 bit
)

Au moins pour le moment. Sur un serveur, j'ai accès à AMD64 mais aucune idée de comment Itanium ressemble, par exemple. Mais les versions 32 bits rapportent toujours x86.

une Autre option, qui fonctionne également sur 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
)
23
répondu Joey 2011-02-16 10:02:56

cela fonctionne aussi sans WMI! Je propose:

 @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
12
répondu Josef 2014-12-03 12:40:43
uname -a #for mac

uname -i #for ubuntu
5
répondu ajmartin 2011-02-14 10:08:19

Et facile serait de tester l'existence de l' %SystemRoot%\SysWOW64 dossier. Bien qu'il ne soit pas 100% infaillible, il est très bon pour détecter si le système est 64 bits.

3
répondu Mehrdad 2011-02-14 10:05:58

tout le lot là-haut ne fonctionne pas dans mon Windows 8 x64.

travail suivant avec moi:

@cd %programfiles(x86)%\

@if %ERRORLEVEL% == 0 (echo x64&&pause)

@if %ERRORLEVEL% == 1 (echo x86&&pause)
2
répondu ducanhnguyen2k 2012-12-28 06:16:19

enregistrer sous .bat ou .cmd

If Defined ProgramFiles(x86) (\Fileserver\Distribution\Softwarex64.exe) else (\Fileserver\Distribution\Softwarex86.exe)

si la Source D'Installation dans la Machine locale pointe juste vers elle (D:\Programs\Softwarex64.exe)

et si vous voulez juste exécuter des commandes et ne pas installer, tapez juste la commande que vous voulez pour x64 entre le premier () et les commandes pour x86 entre le deuxième ()

If Defined ProgramFiles(x86) (ipconfig /all & @echo  This Is A 64-bit System ) else (arp -a & @echo This Is A 32-bit System)

Copiez ceci dans votre CMD pour le tester

je espérons que cela aide

1
répondu Match 2012-01-21 20:28:31

sur Linux, vous pouvez simplement utiliser "arch" en ligne de commande.

ubuntu# arch
x86_64

sur OSX (Snow Leopard), il retourne "i386", même si vous êtes sur du matériel 64 bits.

0
répondu Preston Lee 2011-02-14 20:57:21

la méthode ci-dessous devrait être assez fiable car elle fonctionnera même si les variables d'environnement ont été touchées:

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'

cette méthode repose sur le fait que "%WINDIR%\System32\kernel32.dll" doit être présent sur tous les systèmes Windows. Les versions 64 bits de Windows incluent également" %WINDIR%\SysWOW64 " répertoire contenant des versions 32 bits de fichiers système, qui n'est pas présent sur les systèmes 32 bits.

sur les systèmes 64 bits, les applications 32 bits sont redirigées vers SysWOW64 en essayant d'accéder à des fichiers dans System32. Donc, si on obtient la même taille kernel32.dll depuis System32 et SysWOW64, cela signifie que la redirection est en vigueur et que notre script tourne dans une console 32 bits sur OS 64 bits.

0
répondu R.G. 2014-02-27 21:52:56