comment obtenir les fichiers programme x86 env variable?

108

Je voudrais savoir comment je peux afficher l'emplacement de Program Files (x86) dans l'invite de commande. J'utilise Windows 7 64 bits.

J'ai essayé:

echo %programfiles(x86)%et echo %programfiles%,
tous deux affichant uniquementC:\Program Files

Lorsque j'ai vérifié manuellement le registre,
HKLM / Software / microsoft / windows / currentversion ,
les programfilesdirpoints vers C:\Program Fileset

HKLM / Software / WOW64 / Microsoft / winodws / currentversion ,
les programfilesdirpoints vers C:\Program Files (x86).

Mais, pourquoi suis-je toujours affiché avec C: \ Program Files ??

Ashok
la source
10
Je pense que la vraie question est, pourquoi n'y a-t-il pas une version de% programfiles% qui pointe toujours vers x86 à la fois sur Windows 7 et Windows XP pour simplifier les programmes en cours d'exécution qui sont installés sur les deux? Par exemple, après avoir installé les outils de débogage pour Windows (x86) sur XP, il se trouve dans Program Files, mais sur Windows 7, il se trouve sur Program Files (x86), ce qui signifie qu'il n'y a pas de moyen simple de créer un fichier de commande pouvant être distribué sur tous les ordinateurs car aucune des variables d'environnement intégrées ne pointe systématiquement vers l'emplacement 32 bits pour Program Files.
dj69 du
[posté après avoir lu toutes les réponses] IMHO, un point qui manque dans cette discussion est que quelle que soit la variable que vous utilisez, il est garanti de toujours pointer vers le dossier approprié. Cela devient critique dans les rares cas où Windows est installé sur un lecteur autre que C: \.
Amir Katz

Réponses:

179

Sur une machine 64 bits exécutée en mode 64 bits:

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

Sur une machine 64 bits exécutée en mode 32 bits (WOW64):

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

Sur une machine 32 bits exécutée en mode 32 bits:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%
SecurityMatt
la source
18
Quels% programfiles (x86)% retournera sur une machine 32 bits en mode 32 bits?
Ivan Kochurkin
Sous Windows XP (x86) ne fonctionne pas, vous devez mettre% programfiles%. Je pense que le seul moyen est de vérifier d'abord par code la version du système d'exploitation, puis d'utiliser une variable ou une autre.
gsubiran
3
Cela peut valoir la peine d'ajouter% ProgramW6432% à la liste ci-dessus.
Alex Wiese le
2
La même chose s'applique à la version 32 bits de Windows 7 - il n'y a pas de variable d'environnement% programfiles (x86)%
badsamaritan
1
Je seconde @Alex Wiese,% ProgramW6432% aura toujours le répertoire des fichiers de programme 64 bits. % ProgramFiles (x86)% aura toujours le répertoire des fichiers programme 32 bits. Ces deux variables sont stables ... les autres peuvent changer en fonction du mode dans lequel le système d'exploitation 64 bits (ou l'invite de commande) s'exécute.
Jason
36

Une autre variable d'environnement pertinente est:

% ProgramW6432%

Ainsi, sur une machine 64 bits fonctionnant en mode 32 bits (WOW64):

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

De Wikipedia :

La variable% ProgramFiles% pointe vers le répertoire Program Files, qui stocke tous les programmes installés de Windows et autres. La valeur par défaut sur les systèmes de langue anglaise est "C: \ Program Files". Dans les éditions 64 bits de Windows (XP, 2003, Vista), il existe également% ProgramFiles (x86)%, qui est par défaut "C: \ Program Files (x86)", et% ProgramW6432%, qui est par défaut "C: \Fichiers de programme". Le% ProgramFiles% lui-même dépend du fait que le processus demandant la variable d'environnement soit lui-même 32 bits ou 64 bits (ceci est dû à la redirection Windows sur Windows 64 bits).

Référence: http://en.wikipedia.org/wiki/Environment_variable

viniciussss
la source
3
Meilleure référence: MSDN: Détails d'implémentation WOW64 - "Les variables d'environnement ProgramW6432 et CommonProgramW6432 ont été ajoutées à partir de Windows 7 et Windows Server 2008 R2." Wikipédia contredit directement cela; Fait intéressant, Wikipedia ne répertorie que les trois versions qui ne prennent pas en charge cette variable selon MSDN. Malheureusement, je n'ai pas XP / Vista 64 bits à tester.
Lexikos
1
En deuxième lecture, je constate que l'exigence de Windows 7/2008 R2 s'applique uniquement aux processus 64 bits. La variable est définie uniquement pour les processus 32 bits sous Vista x64.
Lexikos
4

Sur une machine Windows 64 bits, echo% programfiles (x86)% imprime C: \ Program Files (x86)

Sriranga Chidambara
la source
0

IMHO, un point qui manque dans cette discussion est que quelle que soit la variable que vous utilisez, il est garanti de toujours pointer vers le dossier approprié. Cela devient critique dans les rares cas où Windows est installé sur un lecteur autre que C: \

Amir Katz
la source
1
C'est une bonne note. Mais comme il ne répond pas directement à la question, il aurait été préférable de l'écrire en commentaire de la question elle-même.
AbstractVoid