Quelqu'un sait-il comment créer un fichier de commandes pouvant traiter un programme dans un système 64 bits ou un autre dans un système 32 bits?
Vérifiez que %PROCESSOR_ARCHITECTURE%
est x86
:
if %PROCESSOR_ARCHITECTURE%==x86 (
rem 32 bit
) else (
rem 64 bit
)
Au moins pour le moment. Sur un serveur auquel j'ai accès, c'est AMD64
, mais je ne vois pas du tout à quoi ressemble Itanium, par exemple. Mais les versions 32 bits signalent toujours x86
.
Une autre option, qui fonctionne aussi 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
)
Cela fonctionne aussi sans WMI! Je suggère:
@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
uname -a #for mac
uname -i #for ubuntu
Et moyen facile serait de tester l'existence du dossier %SystemRoot%\SysWOW64
. Bien que ce ne soit pas à 100% infaillible, c'est un très bon moyen de détecter si le système est en 64 bits.
Tous les lots ne fonctionnent pas dans Windows 8 x64.
Après le travail avec moi:
@cd %programfiles(x86)%\
@if %ERRORLEVEL% == 0 (echo x64&&pause)
@if %ERRORLEVEL% == 1 (echo x86&&pause)
Cette ligne vous donnera ce que vous voulez, fonctionne sur XP, Vista et 7
enregistrez-le en tant que .bat ou .cmd
If Defined ProgramFiles(x86) (\\Fileserver\Distribution\Softwarex64.exe) else (\\Fileserver\Distribution\Softwarex86.exe)
Si la source d'installation de la machine locale pointe simplement vers elle (D:\Programs\Softwarex64.exe)
et si vous voulez simplement exécuter des commandes et ne pas installer, tapez simplement la commande que vous voulez pour x64 Entre la première () et les commandes pour x86 Entre la seconde ()
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
J'espère que ça aide
Sous Linux, vous pouvez simplement utiliser "Arch" sur la ligne de commande.
ubuntu# Arch
x86_64
Sur OSX (Snow Leopard), il renvoie "i386", même si vous utilisez du matériel 64 bits.
La méthode ci-dessous devrait être assez fiable car elle fonctionnera même si les variables d'environnement ont été modifié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 le répertoire "% WINDIR%\SysWOW64" contenant les versions 32 bits des 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 lors de la tentative d'accès aux fichiers dans System32. Ainsi, si nous obtenons la même taille kernel32.dll de System32 et de SysWOW64, cela signifie que la redirection est effective et que notre script s'exécute dans une console 32 bits sur un système d'exploitation 64 bits.