3

У меня какая-то проблема с системной переменной PATH. Так как я использую много приложений и сценариев cmd, я многое добавил к нему. Но длина строки не является проблемой. Я обошел это ограничение.

Advanced System Properties - единственное приложение, которое я заметил, чтобы правильно инициализировать переменную PATH после редактирования. Если я редактирую реестр вручную, приложения не используют обновленную версию PATH. Поэтому я должен использовать его или держать вход и выключение.

Тем не менее, в последнее время, после установки некоторых значений PATH в этом приложении, оно всегда заканчивается (null), даже если это одна и та же строка. Как только я нажимаю ОК, становится темно. Записи реестра все еще там. Я должен выйти или перезапустить, чтобы PATH был заполнен всем, что есть в его записи реестра.

Я даже обрезал его до% SystemRoot%\system32;% SystemRoot%;% SystemRoot%\System32\Wbem Тем не менее, PATH =(ноль) и% windir% не работает.

Оставь это, это работает.

Редактировать это, нет. Нет, пока я не перезапущу.

Итак, есть идеи?... о том, почему расширенные системные свойства ведут себя так при обновлении системных переменных. Я полагаю, что это проблема, так как это приложение для инициализации, и так как при чистом перезапуске все работает.

3 ответа3

7

После некоторых попыток мне удалось придумать некоторые базовые правила для переменных среды при работе с инструментами командной строки и PATH.

Первый. A) Длина: переменная не должна быть длиннее 2047. Если есть переменные длиннее 2047, переменные после них не будут расширяться, не будут отображаться, и Path станет пустым, PATH =(пустым).

Маловероятно, что он прибудет сюда, но, как это бывает, я оказался в такой ситуации, и это было главной проблемой, однако это ограничение сложно, поскольку оно вступает в силу только после редактирования переменных среды в редакторе (Advanced System Settings / SystemPropertiesAdvanced .EXE). Это не будет иметь никакого отрицательного эффекта, если переменные останутся неотредактированными после загрузки, но, если дочерний проводник будет запущен для просмотра в отдельном процессе, это повлияет на командные консоли, открытые из этих окон проводника.

Первый. Б) какая длина? Это не важно Если переменная используется в командной консоли, она ограничена в любом случае значением 2047 символов, расширенным или объявленным.

Объявлено:

ex:
x = %variable001%;%variable002%;%variable003%;...;%variable146%;%variable147%

Won't work.
Up to 146, it will because x won't be longer than 2047.
But 147 will kill it. Length of %variable???%; x 147 = 2058.

Расширен:

ex:
x001 = C:\Program Files
x002 = C:\Program Files
x003 = C:\Program Files
...
x120 = C:\Program Files
x121 = C:\Program Files

z = %x001%;%x002%;%x003%;...;%x120%;%x121%;

Will work but will show only up to x120 and part of x121.
Length of C:\Program Files; x 120 = 2040 + C:\Prog of x121

Второй. Место: расширяемые переменные не расширяются рекурсивно. В реестре они имеют тип REG_EXPAND_SZ, в редакторе переменных окружения они устанавливаются, если вводится символ%. Если объявлены такие переменные, это нужно сделать так, чтобы они были инициализированы до PATH. Нормальные переменные не имеют этой проблемы. Они могут быть объявлены после PATH, и их значения будут отображаться.

ex:
a = C:\Windows
b (exp) = %SystemRoot%
c (exp) = %a%;%b%;%x%;%y%
x = C:\Windows
y (exp) = %SystemRoot%
z (exp) = %a%;%b%;%x%;%y%

echo %c% will output C:\Windows;C:\Windows;C:\Windows;%y%
                          a          b          x      y
echo %y% will output C:\Windows
echo %z% will output C:\Windows;C:\Windows;C:\Windows;C:\Windows
                          a          b          x          y

Переменная y не была расширена внутри c, потому что она была объявлена после c, но была расширена в клоне c, z.

Таким образом, чтобы поддерживать PATH живым и здоровым, перед ним не должно быть длинной переменной, и она может содержать расширяемые переменные, если они объявлены перед Path в алфавитной иерархии (от a до o). Все время сохраняя окончательное значение длины ниже 2048.

2

Я исправил эту проблему, сбросив переменную PATH, используя старый добрый путь в стиле DOS.

Длинное имя папки - c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC

Эквивалентное короткое имя - c:\PROGRA~2\MICROS~1.0\VC

Спасибо Timbo за решение for %I in (.) do echo %~sI чтобы получить путь DOS. СООБЩЕНИЕ

Надеюсь, что это может помочь решить проблему.

2

У меня был такой же опыт! Ваш "ПУТЬ" просто слишком большой!

PATH не может быть длиннее, чем "определенное количество символов", не могу вспомнить, сколько.

В любом случае, это ограничение применяется в этом окне панели управления, которое позволяет вам его редактировать.

Если вы открываете реестр и просто добавляете в него текст, вы можете увеличить его; но делая это, вы просто переполняете это.

Интересным побочным эффектом является то, что% windir% тоже теряет свою ценность.

Конечно, в реестре они оба заполнены байтами, но окна не могут их прочитать.

Итак, решение таково:

  1. открыть редактор PATH в панели управления
  2. удалить персонажа
  3. попробуйте добавить, скажем, «а» (нажав клавишу «а»)
  4. Если вы не можете добавить «а», повторите с шага 2. В противном случае, поздравляю: вы нашли предел PATH. Вы не можете сделать это больше, чем это

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