Getting the correct “Program Files” directory in 32 vs 64 bit from a .cmd file

We have several deployment scripts that have to run on both 32-bit and 64-bit environments. Until now, we just modified the script with a “replace all’ command for the 64-bit, which had to use “C:Program Files (x86)” instead of the traditional “C:Program Files” directory.

This was my first attempt:

set BTDFProgFiles="%programfiles(x86)%"
if %BTDFProgFiles%=="" set BTDFProgFiles="%programfiles%"
echo BTDFProgFiles=%BTDFProgFiles%

rem Then run the desired program 
%BTDFMSBuildPath% "%BTDFProgFiles%ABC.Common%2DeploymentABC.Common.BizTalk.Deployment.btdfproj"  /p:%PARMS% /l:FileLogger,Microsoft.Build.Engine;logfile="%BTDFProgFiles%ABC.EC.Common%2DeployResults

Then later, I was finding the quotes weren’t working, so this was the fix:

@ECHO OFF
setlocal EnableDelayedExpansion 
IF (%1) ==() GOTO NOPARM1 
IF (%2) ==() GOTO NOPARM2 

IF EXIST "%windir%Microsoft.NETFrameworkv3.5MSBuild.exe" (
SET BTDFMSBuildPath="%windir%Microsoft.NETFrameworkv3.5MSBuild.exe"
) ELSE IF EXIST "%windir%Microsoft.NETFrameworkv2.0.50727MSBuild.exe" (
SET BTDFMSBuildPath="%windir%Microsoft.NETFrameworkv2.0.50727MSBuild.exe"
)
@echo on 
set "BTDFProgFiles=%programfiles(x86)%"
if "%BTDFProgFiles%"=="" set "BTDFProgFiles=%programfiles%"
echo BTDFProgFiles=%BTDFProgFiles%

rem Then run the desired program 
%BTDFMSBuildPath% "%BTDFProgFiles%ABC.Common%2DeploymentABC.Common.BizTalk.Deployment.btdfproj"  /p:%PARMS% /l:FileLogger,Microsoft.Build.Engine;logfile="%BTDFProgFiles%ABC.EC.Common%2DeployResultsDeployResults.txt" 

NOTE: This was in conjunction with a wrapper script to run a series of BTDF (BizTalk Deployment Framework) scripts to deploy about 8 apps in one script.

Uncategorized  

Leave a Reply