jak uzyskać pliki programu zmienną env x86?

108

Chciałbym wiedzieć, jak mogę wyświetlić lokalizację plików programów (x86) w wierszu polecenia. Używam 64-bitowego systemu Windows 7.

Próbowałem:

echo %programfiles(x86)%i echo %programfiles%,
z których oba wyświetlacze tylkoC:\Program Files

Kiedy ręcznie sprawdzana rejestru
HKLM / Software / Microsoft / Windows / CurrentVersion ,
że programfilesdirwskazuje na C:\Program Filesi

HKLM / Software / WOW64 / Microsoft / winodws / CurrentVersion ,
to programfilesdirwskazuje C:\Program Files (x86).

Ale dlaczego zawsze jestem wyświetlany z C: \ Program Files ??

Ashok
źródło
10
Myślę, że prawdziwe pytanie brzmi: dlaczego nie istnieje wersja% programfiles%, która zawsze wskazuje na x86 zarówno w systemie Windows 7, jak i Windows XP, aby uprościć uruchamianie programów zainstalowanych na obu? Na przykład po zainstalowaniu narzędzi debugowania dla systemu Windows (x86) w systemie XP znajduje się w Program Files, ale w systemie Windows 7 znajduje się w Program Files (x86), co oznacza, że ​​nie ma prostego sposobu na utworzenie pliku poleceń, który można rozprowadzać na wszystkich komputerach ponieważ żadna z wbudowanych zmiennych środowiskowych nie wskazuje konsekwentnie 32-bitowej lokalizacji dla Program Files.
dj69
[opublikowano po przeczytaniu wszystkich odpowiedzi] IMHO, jeden punkt, którego brakuje w tej dyskusji, to to, że niezależnie od używanej zmiennej, zawsze będzie wskazywać odpowiedni folder. Staje się to krytyczne w rzadkich przypadkach, gdy system Windows jest zainstalowany na dysku innym niż C: \.
Amir Katz

Odpowiedzi:

179

Na komputerze 64-bitowym działającym w trybie 64-bitowym:

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

Na komputerze 64-bitowym działającym w trybie 32-bitowym (WOW64):

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

Na komputerze 32-bitowym działającym w trybie 32-bitowym:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%
Bezpieczeństwo Mat
źródło
18
Jakie pliki% programfiles (x86)% zwróci na komputerze 32-bitowym w trybie 32-bitowym?
Ivan Kochurkin
W systemie Windows XP (x86) nie działa, musisz umieścić% programfiles%. Myślę, że jedynym sposobem jest sprawdzenie kodem wersji systemu operacyjnego, a następnie użycie jednej lub drugiej zmiennej.
gsubiran,
3
Warto dodać% ProgramW6432% do powyższej listy.
Alex Wiese,
2
To samo dotyczy 32-bitowej wersji systemu Windows 7 - nie ma zmiennej środowiskowej% programfiles (x86)%
badsamaritan
1
Po drugie @Alex Wiese,% ProgramW6432% będzie zawsze mieć katalog z plikami programów 64-bitowych. % ProgramFiles (x86)% zawsze będzie zawierał 32-bitowy katalog plików programów. Te dwie zmienne są stabilne ... pozostałe mogą się zmieniać w zależności od tego, w jakim trybie działa 64-bitowy system operacyjny (lub wiersz poleceń).
Jason,
36

Inną istotną zmienną środowiskową jest:

% Program W6432%

Tak więc na 64-bitowej maszynie działającej w trybie 32-bitowym (WOW64):

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

Z Wikipedii :

Zmienna% ProgramFiles% wskazuje na katalog Program Files, w którym są przechowywane wszystkie zainstalowane programy systemu Windows i inne. Wartością domyślną w systemach anglojęzycznych jest „C: \ Program Files”. W 64-bitowych wersjach systemu Windows (XP, 2003, Vista) istnieje również% ProgramFiles (x86)%, który domyślnie ma wartość „C: \ Program Files (x86)” i% ProgramW6432%, który domyślnie ma wartość „C: \Pliki programów". Sam plik% ProgramFiles% zależy od tego, czy sam proces żądający zmiennej środowiskowej jest 32-bitowy czy 64-bitowy (jest to spowodowane przekierowaniem systemu Windows na Windows 64-bit).

Źródła: http://en.wikipedia.org/wiki/Environment_variable

viniciussss
źródło
3
Lepsze odniesienie: MSDN: Szczegóły implementacji WOW64 - „Zmienne środowiskowe ProgramW6432 i CommonProgramW6432 zostały dodane począwszy od systemów Windows 7 i Windows Server 2008 R2”. Wikipedia bezpośrednio temu zaprzecza; co ciekawe, Wikipedia wymienia tylko trzy wersje, które nie obsługują tej zmiennej według MSDN. Niestety nie mam 64-bitowego XP / Vista do przetestowania.
Lexikos,
1
Po drugim czytaniu widzę, że wymóg Windows 7/2008 R2 dotyczy tylko procesów 64-bitowych. Zmienna jest definiowana tylko dla procesów 32-bitowych w systemie Vista x64.
Lexikos
4

Na komputerze z systemem Windows 64-bitowym echo% programfiles (x86)% drukuje C: \ Program Files (x86)

Sriranga Chidambara
źródło
0

IMHO, jedna kwestia, której brakuje w tej dyskusji, to to, że niezależnie od używanej zmiennej gwarantuje ona zawsze wskazanie odpowiedniego folderu. Staje się to krytyczne w rzadkich przypadkach, gdy system Windows jest zainstalowany na dysku innym niż C: \

Amir Katz
źródło
1
To dobra notatka. Ale ponieważ nie odpowiada bezpośrednio na pytanie, lepiej byłoby napisać to jako komentarz do samego pytania.
AbstractVoid