Batch File Check Directory exists in x64 and/or x86
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.
Related videos on Youtube
Phil Tingle
Updated on September 18, 2022Comments
-
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 over 10 yearsNo need for
:end
label, there is already:eof
built in. -
sryaoperations over 10 yearsThanks, 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.