Wie bekomme ich Programmdateien x86 env Variable?

108

Ich möchte wissen, wie ich den Speicherort von Programmen (x86) in der Eingabeaufforderung anzeigen kann. Ich benutze Windows 7 64bit.

Ich habe es versucht:

echo %programfiles(x86)%und echo %programfiles%,
von denen beide Displays nurC:\Program Files

Wenn ich überprüft die Registrierung manuell,
HKLM / Software / Microsoft / Windows / Currentversion ,
die programfilesdirPunkte zu C:\Program Filesund

HKLM / Software / WOW64 / Microsoft / winodws / currentversion ,
die programfilesdirPunkte auf C:\Program Files (x86).

Aber warum werde ich immer mit C: \ Programme angezeigt?

Ashok
quelle
10
Ich denke, die eigentliche Frage ist, warum es keine Version von% programfiles% gibt, die unter Windows 7 und Windows XP immer auf x86 verweist, um das Ausführen von Programmen zu vereinfachen, die auf beiden installiert sind. Nach der Installation der Debugging-Tools für Windows (x86) unter XP befindet sie sich beispielsweise in den Programmdateien, unter Windows 7 jedoch in den Programmdateien (x86). Dies bedeutet, dass es keine einfache Möglichkeit gibt, eine Befehlsdatei zu erstellen, die auf alle Computer verteilt werden kann da keine der integrierten Umgebungsvariablen konsistent auf den 32-Bit-Speicherort für Programmdateien verweist.
DJ69

Antworten:

178

Auf einem 64-Bit-Computer, der im 64-Bit-Modus ausgeführt wird:

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

Auf einem 64-Bit-Computer, der im 32-Bit-Modus (WOW64) ausgeführt wird:

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

Auf einem 32-Bit-Computer, der im 32-Bit-Modus ausgeführt wird:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%
SecurityMatt
quelle
18
Welche% Programmdateien (x86)% werden auf 32-Bit-Computern im 32-Bit-Modus zurückgegeben?
Ivan Kochurkin
Unter Windows XP (x86) funktioniert dies nicht. Sie müssen% programfiles% eingeben. Ich denke, die einzige Möglichkeit besteht darin, zuerst die Betriebssystemversion per Code zu überprüfen und dann die eine oder andere Variable zu verwenden.
Gsubiran
3
Es könnte sich lohnen,% ProgramW6432% zur obigen Liste hinzuzufügen.
Alex Wiese
2
Gleiches gilt für die 32-Bit-Version von Windows 7 - es gibt keine Umgebungsvariable% programfiles (x86)%
badsamaritan
1
Ich zweite @Alex Wiese,% ProgramW6432% wird immer das 64-Bit-Programmdateiverzeichnis haben. % ProgramFiles (x86)% enthält immer das 32-Bit-Programmdateiverzeichnis. Diese beiden Variablen sind stabil ... die anderen können sich ändern, je nachdem, in welchem ​​Modus das 64-Bit-Betriebssystem (oder die Eingabeaufforderung) ausgeführt wird.
Jason
35

Eine weitere relevante Umgebungsvariable ist:

% ProgramW6432%

Auf einem 64-Bit-Computer, der im 32-Bit-Modus (WOW64) ausgeführt wird:

  • echo% programfiles% ==> C: \ Programme (x86)
  • echo% programfiles (x86)% ==> C: \ Programme (x86)
  • echo% ProgramW6432% ==> C: \ Programme

Aus Wikipedia :

Die Variable% ProgramFiles% zeigt auf das Verzeichnis Programme, in dem alle installierten Programme von Windows und anderen gespeichert sind. Die Standardeinstellung auf englischsprachigen Systemen ist "C: \ Programme". In 64-Bit-Editionen von Windows (XP, 2003, Vista) gibt es außerdem% ProgramFiles (x86)% mit dem Standardwert "C: \ Programme (x86)" und% ProgramW6432% mit dem Standardwert "C:". \Programmdateien". % ProgramFiles% selbst hängt davon ab, ob der Prozess, der die Umgebungsvariable anfordert, selbst 32-Bit oder 64-Bit ist (dies wird durch die 64-Bit-Umleitung unter Windows verursacht).

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

viniciussss
quelle
3
Bessere Referenz: MSDN: WOW64-Implementierungsdetails - "Die Umgebungsvariablen ProgramW6432 und CommonProgramW6432 wurden ab Windows 7 und Windows Server 2008 R2 hinzugefügt." Wikipedia widerspricht dem direkt; Interessanterweise listet Wikipedia nur die drei Versionen auf, die diese Variable laut MSDN nicht unterstützen. Leider habe ich kein 64-Bit XP / Vista zum Testen.
Lexikos
1
Beim zweiten Lesen sehe ich, dass die Windows 7/2008 R2-Anforderung nur für 64-Bit-Prozesse gilt. Die Variable ist nur für 32-Bit-Prozesse unter Vista x64 definiert.
Lexikos
3

Auf einem Windows 64-Bit-Computer druckt echo% programfiles (x86)% C: \ Programme (x86)

Sriranga Chidambara
quelle
0

IMHO, ein Punkt, der in dieser Diskussion fehlt, ist, dass jede Variable, die Sie verwenden, garantiert immer auf den entsprechenden Ordner zeigt. Dies ist in den seltenen Fällen kritisch, in denen Windows auf einem anderen Laufwerk als C: \ installiert ist

Amir Katz
quelle
Dies ist eine gute Anmerkung. Da die Frage jedoch nicht direkt beantwortet wird, wäre es besser gewesen, sie als Kommentar zur Frage selbst zu schreiben.
AbstractVoid