
Моя попытка:
setx PATH "%PATH%;%~dp0"
Как это сделать, чтобы все в системной переменной PATH не дублировалось в пользовательской переменной PATH?
решение1
Как это сделать, чтобы системный PATH не дублировался в пользовательском PATH?
Воспользуйтесь /m
опцией.
setx /m PATH "%PATH%;%~dp0"
Примечания:
/m
- Установите переменную в системной среде HKLM. (По умолчанию используется локальная среда HKCU)
setx
Применение
F:\test>setx /?
SetX has three ways of working:
Syntax 1:
SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M]
Syntax 2:
SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M]
Syntax 3:
SETX [/S system [/U [domain\]user [/P [password]]]]
/F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters]
Description:
Creates or modifies environment variables in the user or system
environment. Can set variables based on arguments, regkeys or
file input.
Parameter List:
/S system Specifies the remote system to connect to.
/U [domain\]user Specifies the user context under which
the command should execute.
/P [password] Specifies the password for the given
user context. Prompts for input if omitted.
var Specifies the environment variable to set.
value Specifies a value to be assigned to the
environment variable.
/K regpath Specifies that the variable is set based
on information from a registry key.
Path should be specified in the format of
hive\key\...\value. For example,
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Control\TimeZoneInformation\StandardName.
/F file Specifies the filename of the text file
to use.
/A x,y Specifies absolute file coordinates
(line X, item Y) as parameters to search
within the file.
/R x,y string Specifies relative file coordinates with
respect to "string" as the search parameters.
/M Specifies that the variable should be set in
the system wide (HKEY_LOCAL_MACHINE)
environment. The default is to set the
variable under the HKEY_CURRENT_USER
environment.
/X Displays file contents with x,y coordinates.
/D delimiters Specifies additional delimiters such as ","
or "\". The built-in delimiters are space,
tab, carriage return, and linefeed. Any
ASCII character can be used as an additional
delimiter. The maximum number of delimiters,
including the built-in delimiters, is 15.
/? Displays this help message.
NOTE: 1) SETX writes variables to the master environment in the registry.
2) On a local system, variables created or modified by this tool
will be available in future command windows but not in the
current CMD.exe command window.
3) On a remote system, variables created or modified by this tool
will be available at the next logon session.
4) The valid Registry Key data types are REG_DWORD, REG_EXPAND_SZ,
REG_SZ, REG_MULTI_SZ.
5) Supported hives: HKEY_LOCAL_MACHINE (HKLM),
HKEY_CURRENT_USER (HKCU).
6) Delimiters are case sensitive.
7) REG_DWORD values are extracted from the registry in decimal
format.
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- сеткс- Установите постоянные переменные среды, SETX можно использовать для установки переменных среды для машины (HKLM) или текущего вошедшего в систему пользователя (HKCU).
решение2
[CMD, WMIC, HKLM, HKCU, SETX, PATH, 2001]
проблеме, вероятно, уже более 20 лет:
-setx Путь "%Путь%;НовыйПуть"засоряет пользовательский путь системным путем.
-setx Путь "%Путь%;НовыйПуть" /Mзасоряет системный путь пользовательским путем.
-загрязнение:видео
Я не уверен, существует ли безопасное собственное решение, которое предусматривало бы исключительное использование командной строки для каталогов, не входящих в ANSI.
это моя попытка!
- с использованием Microsoft Windows [Версия 10.0.19042.868]
0- проверьте пути
echo %Path%
reg query "HKCU\Environment" /v Path
reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v Path
reg EXPORT "HKCU\Environment" UserEnvironment.reg /y
reg EXPORT "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" SystemEnvironment.reg /y
wmic ENVIRONMENT where "username='<SYSTEM>' AND name='Path'" get variablevalue
wmic ENVIRONMENT where "username='%COMPUTERNAME%\\%USERNAME%' AND name='Path'" get variablevalue
кончик: wmic ENVIRONMENT get *
[увидеть больше]
Информация: резервное копирование реестра было выполнено с помощью приведенных выше команд. Файлы были сохранены в текущем каталоге.
1- резервный путь пользователя на%USERPATH%
- команды предполагают:
- ненулевой путь;
- функциональный путь;
- еслинулевойилинефункциональныйпутьделать толькошаг "2"
wmic ENVIRONMENT where "username='%COMPUTERNAME%\\%USERNAME%' AND name='Path'" get variablevalue | more +1 > %temp%\userpathvalue.txt
Информация: в конце строки есть некоторое загрязнение*.
set /P USERPATH=<%temp%\userpathvalue.txt
- добавить '/'
, чтобы лучше видеть пробелы
set "USERPATH=%USERPATH%/"
- удалите до 15 конечных пробелов, затем удалите '/'
set "USERPATH=%USERPATH: /=/%"
set "USERPATH=%USERPATH: /=/%"
set "USERPATH=%USERPATH: /=/%"
set "USERPATH=%USERPATH: /=/%"
set "USERPATH=%USERPATH:/=%"
Информация: количество введенных пробелов в моих тестах НЕ было одинаковым.
echo %USERPATH%[checking final string]
setx USERPATH "%USERPATH%"
* при работе с невидимыми символами их проще идентифицировать, преобразовав в шестнадцатеричную систему счисления, выполните:
wmic ENVIRONMENT where "username='%COMPUTERNAME%\\%USERNAME%' AND name='Path'" get variablevalue | more +1 > %tmp%\0 && set /P TEMPREADER=<%tmp%\0
echo %TEMPREADER% >%tmp%\1 && echo %TEMPREADER%/ && certutil -f -encodehex "%tmp%\1" "%tmp%\2" 11 | more +4 && type "%tmp%\2"
REM to open on notepad, type: certutil -f -encodehex "%tmp%\1" "%tmp%\2" 5 && cmd /C START "" /MAX notepad %tmp%\2
кончик: использовать 4, 5, 10, 11 (то же самое, что и none) в encodehex
2- установить¹²³ путь пользователя как %USERPATH%
единственный
setx PATH ^%USERPATH^%
сделанный!
¹Информация: setx PATH "%USERPATH%"
устанавливает переменнуюценитьвместо того, чтобыбуквальный %USERPATH%
;
²Информация: использование литерала лучше, потому что поведение становится динамическим, а не статическим. т. е. при использовании литерала вместо значения %USERPATH%
в будущем потребуется изменять только переменную. тогда как при использовании значения (т. е. адресов, присутствующих внутри переменной) пользовательская %PATH%
переменная также должна обновляться при изменении %USERPATH%
[что нежелательно].
³Информация: нижеприведенные методы НЕ рекомендуются! Они работают, но при их использовании легче совершить ошибки.
reg add "HKEY_CURRENT_USER\Environment" /v PATH /d ^%USERPATH^% /f
wmic ENVIRONMENT set name="PATH", variablevalue=^%USERPATH^%, username="%COMPUTERNAME%\\%USERNAME%"
3- на данный момент просто используйте%USERPATH%
setx USERPATH "%USERPATH%;ENTER-NEW-PATH-HERE"
кончик: закройте все программы, особенно терминалы, прежде чем продолжить.
4- перепроверить
echo %Path%
reg query "HKCU\Environment" /v Path
reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v Path
wmic ENVIRONMENT where "username='<SYSTEM>' AND name='path'" get variablevalue
wmic ENVIRONMENT where "username='%COMPUTERNAME%\\%USERNAME%' AND name='path'" get variablevalue
5- визуальная проверка
rundll32 sysdm.cpl,EditEnvironmentVariables
Информация: системный PATH можно изменить только в том случае, если предыдущая команда была запущена с правами администратора;
6-TL;DR:сделай это!/or don't!
REM the commands pre-suppose
REM - non-null path;
REM - functional path;
REM if null or unfunctionl path don't progress!
reg query "HKCU\Environment" /v Path
reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v Path
reg EXPORT "HKCU\Environment" UserEnvironment.reg /y
reg EXPORT "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" SystemEnvironment.reg /y
wmic ENVIRONMENT where "username='%COMPUTERNAME%\\%USERNAME%' AND name='Path'" get variablevalue | more +1 > %temp%\userpathvalue.txt
set /P USERPATH=<%temp%\userpathvalue.txt
set "USERPATH=%USERPATH%/"
set "USERPATH=%USERPATH: /=/%"
set "USERPATH=%USERPATH: /=/%"
set "USERPATH=%USERPATH: /=/%"
set "USERPATH=%USERPATH: /=/%"
set "USERPATH=%USERPATH:/=%"
echo %USERPATH%[checking final string] && echo %USERPATH% > %tmp%\0
certutil -f -encodehex "%tmp%\0" "%tmp%\1" 11 | more +4 && type "%tmp%\1"
setx USERPATH "%USERPATH%"
setx PATH ^%USERPATH^%
echo done!
REM setx USERPATH "%USERPATH%;ENTER-NEW-PATH-HERE"
REM please close all programs
ваше здоровье!
решение3
Похоже, эта страница может описывать то, что вы пытаетесь сделать: добавление PATH с помощью SETX или PATHMAN или чего-то еще? Или, может быть, добавьте больше деталей в ваш вопрос, чтобы мы могли понять, чем это отличается. Однако, на этой странице есть несколько решений для одной и той же или похожей проблемы, о которой вы спрашиваете.