Semelhante a Resposta correta de Matt . Basicamente nesta versão, o caminho completo é verificado.
SET AppExePath="%ProgramFiles(x86)%\MyApp\app.exe"
IF NOT EXIST %AppExePath% SET AppExePath="%ProgramFiles%\MyApp\app.exe"
%AppExePath%
Eu tenho um script CMD existente que funciona bem. Ele lança um aplicativo da PROGRAM FILES como assim
"%PROGRAMFILES%\MyApp\app.exe"
Semelhante a Resposta correta de Matt . Basicamente nesta versão, o caminho completo é verificado.
SET AppExePath="%ProgramFiles(x86)%\MyApp\app.exe"
IF NOT EXIST %AppExePath% SET AppExePath="%ProgramFiles%\MyApp\app.exe"
%AppExePath%
Isso é o melhor que eu consegui fazer:
set strProgramFiles=%ProgramFiles%
if exist "%ProgramFiles(x86)%" set strProgramFiles=%ProgramFiles(x86)%
"%strProgramFiles%\MyApp\app.exe"
Basicamente, você precisa testar a variável de ambiente ProgramFiles (x86) para determinar se você está no Windows de 64 bits ou não. Aqui está um arquivo de lote de amostra.
if "%programfiles(x86)%zzz"=="zzz" goto 32BIT
echo 64-bit Windows installed
"%PROGRAMFILES(x86)%\MyApp\app.exe"
goto END
:32BIT
echo 32-bit Windows installed
"%PROGRAMFILES%\MyApp\app.exe"
:END
Outra abordagem é executar o script em cmd.exe
de 32 bits, para que ele possa aproveitar o redirecionamento do sistema de arquivos WOW64 e modificações nas variáveis do ambiente . Se você puder modificar o chamador, não precisará modificar o script em questão.
Você pode até mesmo ter o script detectado quando estiver sendo executado em cmd.exe
de 64 bits e reiniciar usando ocmd.exe
de 32 bits%:
@echo off
if "%PROCESSOR_ARCHITECTURE%" == "x86" goto :x86
echo Restarting using Wow64 filesystem redirection: %0 %*
%SystemRoot%\SysWOW64\cmd.exe /c %0 %*
exit /b %ERRORLEVEL%
:x86
rem Rest of script follows...
Observe que errar esse hack pode resultar na geração interminável de cmd.exe
processos. É por isso que usei goto
e um rótulo em vez de if ... ( ... )
: os parâmetros da linha de comando podem conter parênteses e if ... ( ... )
realiza uma pesquisa gulosa para o primeiro parêntese de fechamento.