як отримати програмні файли x86 env змінної?


108

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

Я спробував:

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

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

HKLM / Програмне забезпечення / WOW64 / Microsoft / winodws / currentversion ,
на що programfilesdirвказує C:\Program Files (x86).

Але чому мені завжди відображаються файли C: \ Program Files ??


10
Я думаю, що справжнє питання полягає в тому, чому не існує версії% programfiles%, яка завжди вказує на x86 на обох Windows 7 та Windows xp для спрощення запущених програм, встановлених на обох? Наприклад, після встановлення інструментів налагодження для Windows (x86) на XP він знайдеться в програмних файлах, але в Windows 7 - у програмних файлах (x86), а це означає, що немає простого способу створення командного файлу, який можна розподілити на всіх комп'ютерах оскільки жодна із вбудованих змінних середовища послідовно не вказує на 32-бітове розташування програмних файлів.
dj69

Відповіді:


178

На 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)%

18
Які% програмних файлів (x86)% повертаються на 32-розрядному верстаті в 32-бітному режимі?
Іван Кочуркін

У Windows XP (x86) не працює, вам потрібно покласти% programfiles%. Я думаю, що єдиний спосіб - спершу перевірити версію ОС за кодом, а потім використовувати ту чи іншу змінну.
gsubiran

3
Можливо, варто додати% ProgramW6432% до списку вище.
Алекс Візе

2
Те ж стосується 32-розрядної версії Windows 7 - немає% programfiles (x86)% змінної середовища
badsamaritan

1
Я другий @Alex Wiese,% ProgramW6432% матиме 64-бітний каталог програмних файлів завжди. % ProgramFiles (x86)% завжди матиме 32-бітний каталог програмних файлів. Ці дві змінні стабільні ... інші можуть змінюватися залежно від того, в якому режимі працює 64-розрядна ОС (або командний рядок).
Джейсон

36

Інша відповідна змінна середовище:

% ПрограмиW6432%

Отже, на 64-бітній машині, що працює в 32-бітному (WOW64) режимі:

  • echo% programfiles% ==> C: \ Program Files (x86)
  • echo% programfiles (x86)% ==> C: \ Program Files (x86)
  • echo% ProgramW6432% ==> C: \ Програмні файли

З Вікіпедії :

Змінна% 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-на-Windows).

Довідка: http://en.wikipedia.org/wiki/Environment_variable


3
Краще посилання: MSDN: WOW64 Деталі реалізації - "Змінні середовища ProgramW6432 та CommonProgramW6432 додані, починаючи з Windows 7 та Windows Server 2008 R2." Вікіпедія прямо суперечить цьому; що цікаво, що у Вікіпедії перелічено лише три версії, які не підтримують цю змінну відповідно до MSDN. На жаль, у мене немає 64-розрядних XP / Vista для тестування.
Лексікос

1
У другому читанні я бачу, що вимога Windows 7/2008 R2 стосується лише 64-бітних процесів. Змінна визначається лише для 32-бітних процесів на Vista x64.
Лексікос


0

IMHO, один момент, якого не вистачає в цій дискусії, полягає в тому, що яку б змінну ви не використовували, вона гарантовано завжди вказує на відповідну папку. Це стає критичним у рідкісних випадках, коли Windows встановлюється на інший диск, крім C: \


Це гарна примітка. Але оскільки це питання не відповідає безпосередньо, краще було б написати це як коментар до самого питання.
AbstractVoid
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.