Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I need to be able to run this batch fine on both x86 and x64 machines to check if a program has been installed correctly .

We have an app that installs in x86 in the standard program files directory, and when installed in x64 it installs in the x86 program files directory.

Currently it reports false, displays the echo that the app is installed and the echo that the app is not installed when run on x86 and 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*** )
share|improve this question

3 Answers 3

When run on x86, your script will execute both code blocks: for x86 and x64. You have to insert goto :eof just before :x64dc label or add another label (say :end) at the end of the script and insert goto end just before :x64dc label

Another problem is the value of %processor_architecture% variable. My machine (Windows 7 x64) returns AMD64, not X64. So in my case neither of if instructions results in a jump, so again both code blocks are executed.

See this question for a list of all possible %processor_architecture% values.

share|improve this answer
    
No need for :end label, there is already :eof built in. –  Vlastimil Ovčáčík Sep 4 '13 at 7:17
    
Thanks, you are right. At the time of writing I wasn't sure if :EOF works in all circumstances. I edited my answer and included your suggestion. –  MBu Sep 4 '13 at 7:38

Wouldn't something like this be clearer? Also eliminates the issue of making assumptions about the processor_architecture variable pointed out by @MBu above.

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.
)

Another alternative that just now occurs to me would be for your installation program or batch file to write a key to the registry with the installation location (can be done with reg.exe, a standard Windows utility). I'd be happy to flesh that solution out a bit more if you're interested.

share|improve this answer

Use if, else if and else constructs:

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***
    )
)
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.