Я пытаюсь установить переменные среды с помощью setx
команды, например, следующим
setx PATH "f: \ common tools \ git \ bin; f: \ common tools \ python \ app; f: \ common tools \ python \ app \ scripts; f: \ common tools \ ruby \ bin; f: \ masm32 \ бен; F: \ Borland \ BCC55 \ Bin;% PATH%»
Однако я получаю следующую ошибку, если значение превышает 1024 символа:
ВНИМАНИЕ: Сохраняемые данные усекаются до 1024 символов.
УСПЕХ: Указанное значение было сохранено.
Но некоторые пути в конце не сохраняются в переменной, я думаю, из-за ограничения символов, как предполагает ошибка.
windows-7
environment-variables
windows-server-2008-r2
Мадхур Ахаджа
источник
источник
%PATH%
Ответы:
Лучше всего редактировать реестр напрямую.
Перейдите к значению
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
и отредактируйте егоPath
(затем перезагрузите, чтобы активировать новое значение).Однако обратите внимание, что, хотя вы можете ввести очень длинный путь (до максимальной длины переменной среды; 2048 или 32 768 байт в зависимости от источника), не все программное обеспечение сможет правильно читать и обрабатывать его, если он слишком длинный.
источник
setx
редактирует реестр, как я указал, затем передаетWM_SETTINGCHANGE
сообщение. Это сообщает всем окнам верхнего уровня, что настройки системы изменились (в данном случае это переменная окружения). Без этого Explorer и программы, которые вы открыли с ним, не будут знать об изменениях. Вы можете транслировать сообщение самостоятельно (я написал программу для этого и пакетный файл для замены,SETX
который выполняет редактирование реестра, а затем трансляцию), но, какsetx
и в диалоговом окне «Свойства системы», у него есть побочные эффекты, которые сделать перезагрузку предпочтительнее.:-|
Если вы используете Windows Vista или выше, вы можете сделать
symbolic link
в папку. например:сделает ссылку, так
c:\pf
будет ваша папка программных файлов. Используя этот трюк, я сбрил с пути 300 персонажей.(Я знаю, что это не связано с setx, но это полезно для людей, которые ищут превышение на пределе 1024 символа)
источник
Вы можете использовать скрипт PowerShell, подобный следующему:
Environment.SetEnvironmentVariable () вызов API будет транслировать ,
WM_SETTINGCHANGE
так что вам не нужно перезагружать.источник
[Environment]::SetEnvironmentVariable('path', "$newPath;$oldPath",'Machine')
?@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::SetEnvironmentVariable('path',\"C:\Program Files (x86)\GNU\GnuPG;$([Environment]::GetEnvironmentVariable('path','Machine'))\",'Machine');"
Этот инструмент командной строки SetEnv с открытым исходным кодом хорош для редактирования PATH и других переменных среды без ограничений. Он использует динамический буфер, поэтому нет статических ограничений, как 1024.
http://www.codeproject.com/Articles/12153/SetEnv
Выбор% в качестве префикса для добавления к переменной мог бы быть лучше, хотя это иногда затрудняет синтаксис при использовании с другими пакетными локальными переменными ...
источник
Гораздо лучше, чем setx для манипулирования путями, - pathed.exe . К сожалению, это ограничено редактированием пути.
В дополнение к превосходному пользовательскому опыту, чем setx, у вас нет ограничения в 1024 символа. В отличие от прямых манипуляций с реестром, это приложение использует API-интерфейс Environment.SetEnvironmentVariable (), который будет транслироваться
WM_SETTINGCHANGE
.источник
Мой любимый способ - изменить имена папок в переменных PATH, чтобы использовать имена 8.3. Этот ответ StackOverflow содержит потрясающий скрипт (запускаемый из файла .bat), который сгенерирует «минимизированную» версию всей переменной PATH, которую затем можно вставить в диалоговое окно «Изменить переменную». Единственное предостережение в том, что вам нужно разделить части SYSTEM и USER. Когда скрипт проходит и выясняет минимизированную версию для каждой папки, он отбрасывает и предупреждает вас о любых неверных / несуществующих путях. Милый маленький бонус за уборку.
источник
fsutil.exe behavior set disable8dot3 1
.fsutil 8dot3name strip
ПОСЛЕ использования скрипта определенно вызовет проблемы для затронутых папок.fsutil 8dot3name strip
ранее сегодня и учитывая, что (а) он сначала проверяет реестр и (б) путь хранится в реестре, моя более ранняя проблема может быть необоснованной, если пользователь не использует/f
опцию (force) ,Вы можете поместить эту строку в вашу BAT:
Смотри дабл
%%
.(Ссылка: https://support.microsoft.com/en-us/kb/75634 )
источник
%path%;c:\...[snip]...\7z
в пользовательскуюpath
переменную, отбросив все, что у вас там было.%path%
в локальном пути переменной среды не должно иметь никакого эффекта.если не требуется разделять системный PATH и пользовательский PATH:
источник
Я думаю, что лучший способ - следующий (с PowerShell). Таким образом, вы также избегаете мельчайших 1024 символов.
Вы можете увидеть код на: https://gist.github.com/drazul/b92f780689bd89a0d2a7
источник