web-dev-qa-db-ja.com

バッチファイルチェックディレクトリはx64および/またはx86に存在します

プログラムが正しくインストールされているかどうかを確認するには、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*** )
2
Phil Tingle

X86で実行すると、スクリプトはx86とx64の両方のコードブロックを実行します。 goto :eofラベルの直前に:x64dcを挿入するか、スクリプトの最後に別のラベル(たとえば、:end)を追加し、goto endラベルの直前に:x64dcを挿入する必要があります。

もう1つの問題は、%processor_architecture%変数の値です。私のマシン(Windows 7 x64)は、AMD64ではなくX64を返します。したがって、私の場合、どちらのif命令もジャンプを引き起こさないため、両方のコードブロックが再度実行されます。

可能なすべての%processor_architecture%値のリストについては、 この質問 を参照してください。

1
MBu

このようなことはもっと明確ではないでしょうか?また、上記の@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ソリューションをもう少し具体化していただければ幸いです。

1
BillP3rd

ifelse 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***
    )
)