プログラムが正しくインストールされているかどうかを確認するには、x86マシンとx64マシンの両方でこのバッチを正常に実行できる必要があります。
標準のプログラムファイルディレクトリのx86にインストールするアプリがあり、x64にインストールすると、x86プログラムファイルディレクトリにインストールされます。
現在、false
を報告し、アプリがインストールされていることを示すエコーと、x86およびx64で実行したときにアプリがインストールされていないことを示すエコーを表示します。
if /i "%processor_architecture%"=="x86" GOTO X86DC
if /i "%processor_architecture%"=="X64" GOTO X64DC
:X86DC
if exist "C:\Program Files\installeddir\app.exe" ( echo ***App is Installed Successfully*** )
if not exist "C:\Program Files\installeddir\app.exe" ( echo ***App is not installed *** )
:X64DC
if exist "C:\Program Files(x86)\installeddir\app.exe" ( echo ***App is Installed Successfully*** )
if not exist "C:\Program Files(x86)\installeddir\app.exe" ( echo ***App is not installed*** )
X86で実行すると、スクリプトはx86とx64の両方のコードブロックを実行します。 goto :eof
ラベルの直前に:x64dc
を挿入するか、スクリプトの最後に別のラベル(たとえば、:end
)を追加し、goto end
ラベルの直前に:x64dc
を挿入する必要があります。
もう1つの問題は、%processor_architecture%
変数の値です。私のマシン(Windows 7 x64)は、AMD64
ではなくX64
を返します。したがって、私の場合、どちらのif
命令もジャンプを引き起こさないため、両方のコードブロックが再度実行されます。
可能なすべての%processor_architecture%
値のリストについては、 この質問 を参照してください。
このようなことはもっと明確ではないでしょうか?また、上記の@MBuで指摘されたprocessor_architecture変数に関する仮定を行う問題も排除されます。
if defined ProgramFiles(x86) (
set appDir=%ProgramFiles(x86)%\installeddir
) else (
set appDir=%ProgramFiles%\installeddir
)
if exist %appDir%\app.exe (
echo We're installed in %appDir%. Woo hoo!
) else (
echo Nope. Not installed.
)
今私が思いついたもう1つの方法は、インストールプログラムまたはバッチファイルで、インストール場所を指定してレジストリにキーを書き込むことです(標準のWindowsユーティリティであるreg.exeを使用して実行できます)。興味があれば、thatソリューションをもう少し具体化していただければ幸いです。
if
、else if
、およびelse
構造を使用します。
if /i "%processor_architecture%"=="x86" (
if exist "C:\Program Files\installeddir\app.exe" (
echo ***App is Installed Successfully***
) else (
echo ***App is not installed ***
)
) else if /i "%processor_architecture%"=="X64" (
if exist "C:\Program Files(x86)\installeddir\app.exe" (
echo ***App is Installed Successfully***
) else (
echo ***App is not installed***
)
)