Как добавить в переменную Windows PATH с помощью setx? Имея странные проблемы
Я хочу изменить переменную Windows PATH с помощью setx
. Следующие действия работают не менее 50% времени в Windows 8:
setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\
Если он дает ошибку "аргумент по умолчанию может использоваться только 2 раза", то следующее работает некоторое время:
setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\"
Разница в том, что мы завернули второй аргумент в кавычки. Я считаю, что цитаты необходимы, когда %PATH%
расширяется, чтобы включить пробелы.
Однако я столкнулся с некоторыми странными проблемами в Windows 7. На одной из машин Windows 7 у меня была эта проблема:
echo %PATH%
Он печатает:
C:\Foo\;C:\Bar\;[...lots of stuff...]C:\Baz\
Затем я делаю это:
setx PATH "%PATH%;C:\Quux\"
Затем он говорит: "Ошибка: усечено на 1024 байта". Теперь давайте посмотрим, что содержит PATH:
echo %PATH%
Он печатает:
C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...lots of stuff, now duplicated...]C:\B
... и обрезается на 1024 байта. Это произошло из-за дубликатов. Также интересно: значение PATH изменяется, несмотря на то, что setx
поднял ошибку и не сказал "Success".
Я смог повторить это странное поведение несколько раз (к счастью, я сохранил исходное содержимое PATH).
В настоящий момент единственным надежным способом, который я знаю для добавления в PATH, является следующее:
-
echo
PATH.
-
Скопируйте содержимое PATH в текстовый файл и вручную добавьте ;C:\Python27\;C:\Python27\Scripts\
в конец PATH.
-
Скопируйте все это из текстового файла.
-
setx PATH "<paste the string here>"
Этот процесс работает каждый раз как на Windows 7, так и на Windows 8.
Я действительно должен был бы сделать это в одной команде. Что я делаю неправильно?
Спасибо.
Ответы
Ответ 1
Запустите cmd
как администратор, затем:
setx /M PATH "%PATH%;<your-new-path>"
Параметр/M задает переменную в области SYSTEM. Поведение по умолчанию - установить его для ПОЛЬЗОВАТЕЛЯ.
TL; DR
Проблема усечения происходит, потому что, когда вы эхо-% PATH%, будет отображаться конкатенация значений SYSTEM и USER. Поэтому, когда вы добавите его в свой второй аргумент в setx, он будет соответствовать значениям SYSTEM и USER внутри USER var. Когда вы снова эхом, все будет удвоено.
Кроме того, для параметра /M требуется привилегия администратора, поэтому вам нужно открыть терминал с "запустить как администратор", иначе setx будет жаловаться на "доступ к пути к реестру запрещен".
Последнее, что нужно отметить: вы не увидите новое значение, когда вы эхо-% PATH% сразу после его установки, вам нужно закрыть cmd
и снова открыть.
Если вы хотите проверить фактические значения, хранящиеся в реестре, отметьте этот вопрос.
Ответ 2
Это отлично работает:
for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set my_user_path=%B
setx PATH "C:\Python27;C:\Python27\Scripts;%my_user_path%"
Первая команда получает переменную окружения USER 'PATH', в переменную 'my_user_path'
Вторая строка добавляет 'C:\Python27; C:\Python27\Scripts;' к переменной среды USER "PATH"
Ответ 3
Если вы не привязаны к setx
, вы можете использовать альтернативный инструмент командной строки, например pathed. Там более полный список альтернативных редакторов PATH на https://superuser.com/questions/297947/is-there-a-convenient-way-to-edit-path-in-windows-7/655712#655712
Вы также можете редактировать значение реестра напрямую, что и делает setx
. Подробнее в этом .
Странно, что ваш %PATH%
получает усечение с 1024 символами. Я думал, что setx
не имеет этой проблемы. Хотя вы, вероятно, должны очистить недопустимые записи пути.
Ответ 4
Я столкнулся с теми же проблемами и нашел удобное решение.
Использование pathman.
pathman /as %M2%
Добавляет, например,% M2% к системному пути. Не больше, не меньше. Больше проблем не возникает, когда получается смесь пользователей PATH и системы PATH. Больше не пытайтесь получить правильные значения из реестра...
Пробовал в Windows 10
Ответ 5
У меня возникли проблемы с управлением моими компьютерными лабораториями, когда переменная окружения% PATH% приблизилась к 1024 символам, которые я написал Powershell script, чтобы исправить ее.
Вы можете скачать код здесь: https://gallery.technet.microsoft.com/scriptcenter/Edit-and-shorten-PATH-37ef3189
Вы также можете использовать его как простой способ безопасного добавления, удаления и анализа записей PATH. Наслаждайтесь.
Ответ 6
Шаги: 1. Откройте командную строку с правами администратора.
Шаги: 2. Запустите команду: setx/M PATH "путь\to;% PATH%"
[Примечание. Обязательно измените команду, чтобы путь\отображал путь к папке из вашего корня.]
Пример: setx/M PATH "C:\Program Files;% PATH%"
Ответ 7
Если кто-то хочет запустить его в PowerShell, он работает, как показано ниже,
Запустите Powershell в качестве администратора
Тогда
setx /M PATH "$Env:PATH;<path to add>"
Чтобы проверить, откройте еще одну Powershell и просмотрите PATH, как показано ниже,
$Env:PATH