Batch File Check Directory exists in x64 and/or x86

13,531

Solution 1

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.

Solution 2

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:
13,531

Related videos on Youtube

Phil Tingle
Author by

Phil Tingle

Updated on September 18, 2022

Comments

  • Phil Tingle
    Phil Tingle over 1 year

    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*** )
    
  • Vlastimil Ovčáčík
    Vlastimil Ovčáčík over 10 years
    No need for :end label, there is already :eof built in.
  • sryaoperations
    sryaoperations over 10 years
    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.