64ビットシステムの場合は1つのプログラムをシェル化し、32ビットシステムの場合は別のプログラムをシェル化するバッチファイルを作成する方法を知っている人はいますか?
%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
)
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
uname -a #for mac
uname -i #for ubuntu
簡単な方法は、%SystemRoot%\SysWOW64
フォルダの存在をテストすることです。 100%万能というわけではありませんが、システムが64ビットかどうかを検出するのに非常に適しています。
私のWindows 8 x64では、そこにあるすべてのバッチが機能しません。
私と一緒に次の作業:
@cd %programfiles(x86)%\
@if %ERRORLEVEL% == 0 (echo x64&&pause)
@if %ERRORLEVEL% == 1 (echo x86&&pause)
このラインはあなたが望むものをあなたに与えます、XP、Vistaと7で動作します
.batまたは.cmdとして保存します
If Defined ProgramFiles(x86) (\\Fileserver\Distribution\Softwarex64.exe) else (\\Fileserver\Distribution\Softwarex86.exe)
ローカルマシンのインストールソースがそれを指している場合(D:\ Programs\Softwarex64.exe)
コマンドを実行するだけでインストールしない場合は、最初のx64間でx64に必要なコマンドを入力し、2番目のx)で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にコピーしてテストします
これが役に立てば幸い
Linuxでは、コマンドラインで「Arch」を使用するだけです。
ubuntu# Arch
x86_64
OSX(Snow Leopard)では、64ビットハードウェアを使用している場合でも、「i386」を返します。
以下の方法は、環境変数が乱されていても機能するため、かなり信頼できるはずです。
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には、32ビットシステムには存在しない32ビットバージョンのシステムファイルを含む「%WINDIR%\ SysWOW64」ディレクトリも含まれています。
64ビットシステムでは、System32のファイルにアクセスしようとすると、32ビットアプリケーションがSysWOW64にリダイレクトされます。したがって、System32とSysWOW64の両方から同じサイズのkernel32.dllを取得した場合、リダイレクトが有効であり、スクリプトが64ビットOSの32ビットコンソールで実行されていることを意味します。