как получить программные файлы x86 переменной env?

108

Я хотел бы знать, как я могу отобразить расположение программных файлов (x86) в командной строке. Я использую 64-битную Windows 7.

Я пробовал:

echo %programfiles(x86)%и echo %programfiles%,
оба из которых только дисплеиC:\Program Files

Когда я вручную проверил реестр,
HKLM / Software / Microsoft / Windows / CurrentVersion ,
что programfilesdirуказывает C:\Program Filesи

HKLM / Software / WOW64 / Microsoft / Winodws / CurrentVersion ,
что programfilesdirуказывает на C:\Program Files (x86).

Но почему я всегда отображаюсь с C: \ Program Files ??

Ашок
источник
10
Я думаю, что реальный вопрос заключается в том, почему нет версии% programfiles%, которая всегда указывает на x86 как в Windows 7, так и в Windows XP, чтобы упростить выполнение программ, установленных на обоих? Например, после установки инструментов отладки для Windows (x86) в XP он находится в Program Files, но в Windows 7 он находится в Program Files (x86), что означает, что нет простого способа создать командный файл, который можно было бы распределить по всем компьютерам. поскольку ни одна из встроенных переменных среды не указывает последовательно на 32-разрядное расположение программных файлов.
dj69
[опубликовано после прочтения всего ответа] ИМХО, в этом обсуждении не хватает одного момента: какая бы переменная вы ни использовали, она всегда будет указывать на соответствующую папку. Это становится критичным в тех редких случаях, когда Windows установлена ​​не на C: \.
Амир Кац,

Ответы:

179

На 64-битной машине, работающей в 64-битном режиме:

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

На 64-битной машине, работающей в 32-битном (WOW64) режиме:

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

На 32-битной машине, работающей в 32-битном режиме:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%
SecurityMatt
источник
18
Какой% programfiles (x86)% вернется на 32-битную машину в 32-битном режиме?
Иван Кочуркин
На windows XP (x86) не работает, нужно поставить% programfiles%. Я думаю, что единственный способ - сначала проверить по коду версию ОС, а затем использовать ту или иную переменную.
gsubiran 05
3
Возможно, стоит добавить% ProgramW6432% в список выше.
Alex Wiese,
2
То же самое относится к 32-битной версии Windows 7 - нет переменной среды% programfiles (x86)%
badsamaritan
1
Второй @Alex Wiese,% ProgramW6432% всегда будет иметь каталог с 64-битными программными файлами. % ProgramFiles (x86)% всегда будет иметь каталог с 32-битными программными файлами. Эти две переменные стабильны ... другие могут меняться в зависимости от того, в каком режиме работает 64-разрядная ОС (или командная строка).
Джейсон,
36

Еще одна важная переменная среды:

% ProgramW6432%

Итак, на 64-битной машине, работающей в 32-битном (WOW64) режиме:

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

Из Википедии :

Переменная% ProgramFiles% указывает на каталог Program Files, в котором хранятся все установленные программы Windows и другие. По умолчанию в англоязычных системах используется "C: \ Program Files". В 64-разрядных выпусках Windows (XP, 2003, Vista) также есть% ProgramFiles (x86)%, значение по умолчанию - «C: \ Program Files (x86)», и% ProgramW6432%, значение по умолчанию - «C: \Программные файлы". Сам% ProgramFiles% зависит от того, является ли процесс, запрашивающий переменную среды, 32-битным или 64-битным (это вызвано 64-битным перенаправлением Windows-on-Windows).

Ссылка: http://en.wikipedia.org/wiki/Environment_variable

viniciussss
источник
3
Лучшая ссылка: MSDN: Детали реализации WOW64 - «Переменные среды ProgramW6432 и CommonProgramW6432 были добавлены, начиная с Windows 7 и Windows Server 2008 R2». Википедия прямо противоречит этому; Интересно, что в Википедии перечислены только три версии, которые не поддерживают эту переменную согласно MSDN. К сожалению, у меня нет 64-битной XP / Vista для тестирования.
Lexikos
1
При втором чтении я вижу, что требование Windows 7/2008 R2 применяется только к 64-битным процессам. Переменная определена только для 32-битных процессов в Vista x64.
Lexikos
4

На 64-битной машине Windows echo% programfiles (x86)% печатает C: \ Program Files (x86)

Шриранга Чидамбара
источник
0

ИМХО, в этом обсуждении не хватает одного момента: какую бы переменную вы ни использовали, она всегда будет указывать на соответствующую папку. Это становится критичным в тех редких случаях, когда Windows установлена ​​не на C: \.

Амир Кац
источник
1
Это хорошая заметка. Но поскольку он не отвечает на вопрос напрямую, было бы лучше написать его как комментарий к самому вопросу.
AbstractVoid