como obter a variável env de arquivos de programa x86?

108

Gostaria de saber como posso exibir a localização dos Arquivos de Programas (x86) no prompt de comando. Estou usando o Windows 7 de 64 bits.

Eu tentei:

echo %programfiles(x86)%e echo %programfiles%,
ambos exibindo apenasC:\Program Files

Quando eu verifiquei manualmente o registro,
HKLM / Software / microsoft / windows / currentversion ,
os programfilesdirpontos para C:\Program Filese

HKLM / Software / WOW64 / Microsoft / winodws / currentversion ,
os programfilesdirpontos para C:\Program Files (x86).

Mas, por que estou sempre sendo exibido com C: \ Arquivos de Programas ??

Ashok
fonte
10
Acho que a verdadeira questão é: por que não há uma versão de% programfiles% que sempre aponta para x86 no Windows 7 e no Windows XP para simplificar a execução de programas instalados em ambos? Por exemplo, depois de instalar as Ferramentas de Depuração para Windows (x86) no XP, é encontrado em Arquivos de Programas, mas no Windows 7 é encontrado em Arquivos de Programas (x86), o que significa que não há uma maneira simples de criar um arquivo de comando que possa ser distribuído em todos os computadores uma vez que nenhuma das variáveis ​​de ambiente integradas apontam consistentemente para o local de 32 bits dos Arquivos de Programas.
dj69,

Respostas:

178

Em uma máquina de 64 bits em execução no modo de 64 bits:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> C:\Program Files (x86)

Em uma máquina de 64 bits em execução no modo de 32 bits (WOW64):

  • echo %programfiles% ==> C:\Program Files (x86)
  • echo %programfiles(x86)% ==> C:\Program Files (x86)

Em uma máquina de 32 bits em execução no modo de 32 bits:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%
SecurityMatt
fonte
18
Qual% programfiles (x86)% retornará na máquina de 32 bits no modo de 32 bits?
Ivan Kochurkin
No Windows XP (x86) não funciona, você precisa colocar% programfiles%. Acho que a única maneira é verificar primeiro a versão do sistema operacional por código e depois usar uma variável ou outra.
gsubiran
3
Pode valer a pena adicionar% ProgramW6432% à lista acima.
Alex Wiese
2
O mesmo se aplica à versão de 32 bits do Windows 7 - não há% programfiles (x86)% variável de ambiente
badsamaritan
1
Segundo @Alex Wiese,% ProgramW6432% terá o diretório de arquivos de programas de 64 bits sempre. % ProgramFiles (x86)% terá o diretório de arquivos de programa de 32 bits, sempre. Essas duas variáveis ​​são estáveis ​​... as outras podem mudar dependendo do modo em que o SO de 64 bits (ou prompt de comando) está sendo executado.
Jason
35

Outra variável de ambiente relevante é:

% ProgramW6432%

Portanto, em uma máquina de 64 bits em execução no modo de 32 bits (WOW64):

  • echo% programfiles% ==> C: \ Arquivos de programas (x86)
  • echo% programfiles (x86)% ==> C: \ Arquivos de programas (x86)
  • echo% ProgramW6432% ==> C: \ Arquivos de programas

Da Wikipedia :

A variável% ProgramFiles% aponta para o diretório Arquivos de Programas, que armazena todos os programas instalados do Windows e outros. O padrão em sistemas de idioma inglês é "C: \ Arquivos de programas". Nas edições de 64 bits do Windows (XP, 2003, Vista), também há% ProgramFiles (x86)%, cujo padrão é "C: \ Arquivos de programas (x86)", e% ProgramW6432%, cujo padrão é "C: \Arquivos de Programas". O próprio% ProgramFiles% depende se o processo que está solicitando a variável de ambiente é de 32 bits ou 64 bits (isso é causado pelo redirecionamento do Windows no Windows de 64 bits).

Referência: http://en.wikipedia.org/wiki/Environment_variable

viniciussss
fonte
3
Referência melhor: MSDN: Detalhes de implementação do WOW64 - "As variáveis ​​de ambiente ProgramW6432 e CommonProgramW6432 foram adicionadas a partir do Windows 7 e do Windows Server 2008 R2." A Wikipedia contradiz isso diretamente; curiosamente, a Wikipedia lista apenas as três versões que não suportam essa variável de acordo com o MSDN. Infelizmente, não tenho XP / Vista de 64 bits para testar.
Lexikos
1
Na segunda leitura, vejo que o requisito do Windows 7/2008 R2 se aplica apenas a processos de 64 bits. A variável é definida apenas para processos de 32 bits no Vista x64.
Lexikos
3

Em uma máquina Windows de 64 bits, echo% programfiles (x86)% imprime C: \ Arquivos de programas (x86)

Sriranga Chidambara
fonte
0

IMHO, um ponto que está faltando nesta discussão é que seja qual for a variável que você usar, é garantido que sempre aponte para a pasta apropriada. Isso se torna crítico nos raros casos em que o Windows é instalado em uma unidade diferente de C: \

Amir Katz
fonte
Esta é uma boa nota. Mas, como não está respondendo à pergunta diretamente, teria sido melhor escrevê-lo como um comentário à própria pergunta.
AbstractVoid