2

Я хочу написать что-то вроде

% ProgramFiles(x86)%\someprogram\someprogram.exe

Это будет работать как в Windows 32, так и в 64-битных версиях

Но:

  1. %ProgramFiles% указывает на папку 32-битных программных файлов только в 32-битной Windows
  2. %ProgramFiles(x86)% указывает на папку 32-битных программных файлов только в 64-битной Windows (ее нет в 32-битной Windows)

Существует ли какая-либо переменная среды Windows, которая всегда указывает на папку 32-разрядных программных файлов, независимо от версии Windows?

2 ответа2

3

Вы всегда можете добавить %ProgramFiles(x86)% к 32-битным платформам Windows. Вы можете использовать простую командную строку, чтобы добавить его:

Set ProgramFiles(x86) = "C:\Program Files"

Тогда у вас есть согласованность на разных платформах.

Редактировать:

Поскольку вы сказали мне, для чего он нужен, я бы сделал что-то подобное для ваших инструкций:

1 - Change to the directory for the program. 

2 - open a command prompt 

3a - type "cd %programfiles(x86)%" 

3b - If  you receive the error "The system cannot find the path specified", 
     go to step 3c.  Otherwise go to 4. 

3c - type "cd %programfiles%" 

4 - Other stuff
0

Мое первое решение:

  if "%ProgramFiles(x86)%" == "" (
    echo Win x86
    set PRGFILES=%ProgramFiles%
  ) else (
    echo Win x64
    set PRGFILES=%ProgramFiles(x86)%
  )
  echo 1: %PRGFILES%

Приведенное выше решение вызвало некоторые проблемы при первом тестировании. Казалось, что символ ")" в% ProgramFiles(x86)% вызвал конец if. Поэтому вторичное решение:

  if "%ProgramFiles(x86)%" == "" set PRGFILES=%ProgramFiles%
  if not "%ProgramFiles(x86)%" == "" set PRGFILES=%ProgramFiles(x86)%
  echo 2: %PRGFILES%

Проверено только на Win 7 x64 и Win XP (x86).

Согласно моему тесту, лучше использовать пользовательские временные переменные среды и не использовать прямые переменные программных файлов (вышеупомянутые проблемы).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .