¿Cómo obtener archivos de programa x86 env variable?

108

Me gustaría saber cómo puedo mostrar la ubicación de los archivos de programa (x86) en el símbolo del sistema. Estoy usando Windows 7 de 64 bits.

He intentado:

echo %programfiles(x86)%y echo %programfiles%,
ambos de los cuales solo muestranC:\Program Files

Cuando verifiqué manualmente el registro,
HKLM / Software / microsoft / windows / currentversion ,
los programfilesdirpuntos C:\Program Filesy

HKLM / Software / WOW64 / Microsoft / winodws / currentversion ,
los programfilesdirpuntos a C:\Program Files (x86).

Pero, ¿por qué siempre se me muestra con C: \ Archivos de programa?

Ashok
fuente
10
Creo que la verdadera pregunta es, ¿por qué no hay una versión de% programfiles% que siempre apunte a x86 tanto en Windows 7 como en Windows XP para simplificar la ejecución de programas que están instalados en ambos? Por ejemplo, después de instalar las herramientas de depuración para Windows (x86) en XP, se encuentra en Archivos de programa, pero en Windows 7 se encuentra en Archivos de programa (x86), lo que significa que no hay una forma sencilla de crear un archivo de comando que se pueda distribuir en todas las computadoras. ya que ninguna de las variables de entorno integradas apunta constantemente a la ubicación de 32 bits para los archivos de programa.
dj69
[publicado después de leer todas las respuestas] En mi humilde opinión, un punto que falta en esta discusión es que cualquier variable que use, está garantizado que siempre apuntará a la carpeta apropiada. Esto se vuelve crítico en los raros casos en los que Windows está instalado en una unidad que no sea C: \.
Amir Katz

Respuestas:

179

En una máquina de 64 bits que se ejecuta en modo de 64 bits:

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

En una máquina de 64 bits que se ejecuta en modo de 32 bits (WOW64):

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

En una máquina de 32 bits que se ejecuta en modo de 32 bits:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%
SecurityMatt
fuente
18
¿Qué% programfiles (x86)% devolverá en una máquina de 32 bits en modo de 32 bits?
Ivan Kochurkin
En Windows XP (x86) no funciona, necesita poner% programfiles%. Creo que la única forma es verificar primero por código la versión del sistema operativo y luego usar una variable u otra.
gsubiran
3
Podría valer la pena agregar% ProgramW6432% a la lista anterior.
Alex Wiese
2
Lo mismo se aplica a la versión de 32 bits de Windows 7 - no hay% programfiles (x86)% variable de entorno
badsamaritan
1
En segundo lugar, @Alex Wiese,% ProgramW6432% tendrá el directorio de archivos de programa de 64 bits, siempre. % ProgramFiles (x86)% tendrá el directorio de archivos de programa de 32 bits, siempre. Esas dos variables son estables ... las otras pueden cambiar según el modo en el que se ejecute el sistema operativo de 64 bits (o el símbolo del sistema).
Jason
36

Otra variable de entorno relevante es:

% ProgramaW6432%

Entonces, en una máquina de 64 bits que se ejecuta en modo de 32 bits (WOW64):

  • echo% programfiles% ==> C: \ Archivos de programa (x86)
  • echo% programfiles (x86)% ==> C: \ Archivos de programa (x86)
  • echo% ProgramW6432% ==> C: \ Archivos de programa

De Wikipedia :

La variable% ProgramFiles% apunta al directorio Archivos de programa, que almacena todos los programas instalados de Windows y otros. El valor predeterminado en los sistemas de idioma inglés es "C: \ Archivos de programa". En las ediciones de 64 bits de Windows (XP, 2003, Vista), también hay% ProgramFiles (x86)%, que por defecto es "C: \ Archivos de programa (x86)", y% ProgramW6432%, que por defecto es "C: \Archivos de programa". El% ProgramFiles% en sí mismo depende de si el proceso que solicita la variable de entorno es en sí mismo de 32 bits o de 64 bits (esto se debe a la redirección de Windows en Windows de 64 bits).

Referencia: http://en.wikipedia.org/wiki/Environment_variable

viniciussss
fuente
3
Mejor referencia: MSDN: Detalles de implementación de WOW64 : "Las variables de entorno ProgramW6432 y CommonProgramW6432 se agregaron a partir de Windows 7 y Windows Server 2008 R2". Wikipedia directamente contradice esto; Curiosamente, Wikipedia solo enumera las tres versiones que no admiten esta variable según MSDN. Desafortunadamente, no tengo XP / Vista de 64 bits para probar.
Lexikos
1
En la segunda lectura, veo que el requisito de Windows 7/2008 R2 solo se aplica a los procesos de 64 bits. La variable está definida solo para procesos de 32 bits en Vista x64.
Lexikos
4

En una máquina con Windows de 64 bits, echo% programfiles (x86)% imprime C: \ Program Files (x86)

Sriranga Chidambara
fuente
0

En mi humilde opinión, un punto que falta en esta discusión es que cualquier variable que use, está garantizado que siempre apuntará a la carpeta apropiada. Esto se vuelve crítico en los raros casos en los que Windows está instalado en una unidad que no sea C: \

Amir Katz
fuente
1
Esta es una buena nota. Pero como no responde a la pregunta directamente, habría sido mejor escribirlo como un comentario a la pregunta en sí.
AbstractVoid