Редактирование переменной Path из командной строки без прав администратора

Рейтинг: 1Ответов: 0Опубликовано: 28.01.2023

Если максимально кратко суть вопроса, то команда setx path "путь;%PATH%" в командной строке без прав администратора работает неправильно. Требуется найти обходной путь или альтернативу этой команды, работающую без прав администратора. Теперь подробно:

В общем, парочка приложений(в частности gcc компилятор) лежат на флешке, но для корректной работы требуется занести некоторые пути в переменную path. По задумке я должен вставить флешку в любой пк и одним открытием батника добавить все переменные куда надо и спокойно делать свои дела. Конечно, можно и ручками всё сделать, но так лучше.

В чем проблема: Известный факт, что переменные path есть пользовательские и системные. Команда setx path редактирует пользовательскую переменную path, если добавить флаг /M, то можно редактировать системную переменную. В хелпе и на форумах обычно примеры типа такого setx path "путь;%PATH%". По задумке код должен добавлять путь; в начало пользовательской переменной path. Это работает, если применять права администратора. А без прав переменная %PATH% - это каша из пользовательских и системных путей(не уничтожаются дубли). Т.е банально склеенные пользовательские и системные пути. Таким образом, при каждом применении такого участка кода в пользовательскую переменную path дополнительно вливаются системные переменные, которые, естественно, дублируются и быстро множатся.

немного экспериментов с переменной %PATH%:

Добавил в начало и конец пользовательской и системной переменных соответствующие значения и вывожу построчно(без прав администратора)

    C:\Users\TestW10>echo %path:;=&echo.%
    SystemBegin          <-- это часть системной переменной
    C:\Windows\system32
    C:\Windows
    C:\Windows\System32\Wbem
    C:\Windows\System32\WindowsPowerShell\v1.0\
    SystemEnd            <-- и это       
    userBegin            <-- это часть пользовательской переменной
    C:\Windows\system32
    C:\Windows
    C:\Windows\System32\Wbem
    C:\Windows\System32\WindowsPowerShell\v1.0\
    userEnd              <-- и это    

Именно в таком порядке у меня и лежат переменные в графическом интерфейсе.

Теперь тоже самое, но с правами администратора:

    C:\Windows\system32>echo %path:;=&echo.%
    SystemBegin
    C:\Windows\system32
    C:\Windows
    C:\Windows\System32\Wbem
    C:\Windows\System32\WindowsPowerShell\v1.0\
    SystemEnd
    userBegin
    userEnd

Становится ощущение, что %PATH% с правами администратора только убирает дубли, повторяющиеся в пользовательской переменной. Проверим еще. Добавил парочку дублирующихся переменных

    C:\Users\TestW10>echo %path:;=&echo.%
    SystemBegin
    C:\Windows\system32
    C:\Windows
    C:\Windows\System32\Wbem
    C:\Windows\System32\WindowsPowerShell\v1.0\
    userEnd          <-- новая часть переменной внутри системной path
    SystemEnd
    userBegin
    C:\Windows\system32
    C:\Windows
    C:\Windows\System32\Wbem
    C:\Windows\System32\WindowsPowerShell\v1.0\
    SystemEnd        <-- новая часть переменной внутри пользовательской path
    userEnd

Теперь тоже самое, но с правами администратора

    C:\Windows\system32>echo %path:;=&echo.%
    SystemBegin
    C:\Windows\system32
    C:\Windows
    C:\Windows\System32\Wbem
    C:\Windows\System32\WindowsPowerShell\v1.0\
    userEnd     <-- 
    SystemEnd
    userBegin

В итоге userEnd внутри системной переменной path появляется первым а userEnd внутри пользовательской переменной не дублируется. Аналогично для SystemEnd. Всё это подтверждает идею о том, что %PATH% с правами администратора выводит содержимое системной переменной path, после чего дополняет не дублирующимися значениями из пользовательской переменной path. В свою очередь %PATH% без прав администратора банально склеивает системные и пользовательские path, не разбирая дубли.

Проблема: Естественно, команда setx path "путь;%PATH%" с разными значениями %PATH% ведет себя по разному. А именно, как и говорил выше, без прав администратора добавляет лишение значения, что при многократном использовании сразу засоряет переменную %PATH%. Каким образом, не имея прав администратора можно добиться правильной работы команды setx path "путь;%PATH%"?

Ответы

Ответов пока нет.