Как добавить в переменную 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