Eu tenho um script cmd existente que funciona bem. Ele lança um aplicativo de arquivos de programa como
"%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%
Este é o melhor que eu poderia inventar:
set strProgramFiles=%ProgramFiles%
if exist "%ProgramFiles(x86)%" set strProgramFiles=%ProgramFiles(x86)%
"%strProgramFiles%\MyApp\app.exe"
Basicamente, você precisa testar para a variável de ambiente ProgramFiles (x86) para determinar se você está em 64 bits ou não. Aqui está um arquivo de lotes 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 abaixo do cmd.exe
, para que ele possa aproveitar o redirecionamento do sistema de arquivos WOW64 e modificações variáveis de ambiente . Se você puder modificar o chamador, nem precisará modificar o script em questão.
Você pode até mesmo ter o script detectar quando ele estiver sendo executado sob o cmd.exe
e reiniciar-se usando o cmd.exe
:
@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...
Note que a obtenção deste hack errado pode resultar em desovar interminável cmd.exe
Processos. É por isso que usei goto
e uma etiqueta em vez de if ... ( ... )
: Os parâmetros da linha de comando podem conter parênteses e if ... ( ... )
realiza uma pesquisa gananciosa para o primeiro parêntese de fechamento.