С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/55: Рейтинг темы: голосов - 55, средняя оценка - 4.84
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
1

Исправить значение переменной PATH

19.10.2012, 08:53. Показов 10271. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здрям!

Bash
1
pathman /as "O:\Oracle\Ora11g\bin"
Добавляется переменная, но в конец.
Подскажите, пожалуйста, как ее воткнуть первой?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2012, 08:53
Ответы с готовыми решениями:

Проблема с переменной %path%
Батник Проверка.bat не работает у некоторых пользователей. Причем версия системы идентичная:...

Парсинг переменной окружения PATH
Доброго времени суток. Дали задачу реализовать алгоритм поиска исполняемых файлов в CMD. Мне нужно...

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

[Статья] Дело о заблокированной переменной окружения %PATH%
Дело о заблокированной переменной окружения %PATH%. Автор: Dragokas Как-то раз мне...

16
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28046 / 15779 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
19.10.2012, 11:53 2
а какая разница, в начале она или в конце?
0
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
19.10.2012, 13:25 3
Kir@, смотрите в сторону SetX.
2
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28046 / 15779 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
19.10.2012, 13:52 4
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\path
сама переменная.
батник:
Код
reg add \\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /t REG_EXPAND_SZ /d O:\Oracle\Ora11g\bin;%%SystemRoot%%\system32;%%SystemRoot%%;%%SystemRoot%%\System32\Wbem; /f
1
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
19.10.2012, 15:03 5
Bash
1
2
set newpath=c:\MyProgramPath
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newpath%;%path% /f
Bash
1
2
set newpath=c:\MyProgramPath
SetX path %newpath%
Правда SetX есть только в системах >= Windows Server 2003.
1
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
19.10.2012, 15:10 6
Цитата Сообщение от Dragokas
Session Manager
Не сработает - есть пробел.
И это тоже, почему - ХЗ.
Bash
1
2
3
4
5
6
set PATH=O:\Oracle\Ora11g\bin;%PATH%
echo %PATH%
pause
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmenment" /v Path /f /t REG_EXPAND_SZ /d "%PATH%"
pause
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path
1
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
19.10.2012, 19:22 7
Вооружившись RegShot-ом сделал снимок и нашел куст:
HKEY_CURRENT_USER\Environment
где изменяется пользовательская переменная среды, при выполнении команды
Bash
1
SetX path Добавляемая папка
Но открыв реестр, и вручную изменив там это значение, запустить программу по этому пути не удается.
Не могу найти, что еще прописывает команда Setx, неужели задействует какие-то API-функции.


 Комментарий модератора 
Не используйте SetX для присвоения значения переменной Path.
Это неверный способ, т.к. переменная будет создана по адресу:
HKEY_CURRENT_USER\Environment\Path
что хоть и перекроет системную переменную HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
но остальные приложения, которые будут записывать новые пути в правильное расположение Path уже будут недоступные.
Верный алгоритм расписан в теме: Автоматически прописать путь к папке в переменную Path
0
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
19.10.2012, 19:28 8
Цитата Сообщение от Dragokas Посмотреть сообщение
Правда SetX есть только в системах >= Windows Server 2003
ORLY?
Windows XP Service Pack 2 Support Tools
В списке есть...
1
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28046 / 15779 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
19.10.2012, 19:39 9
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Windows XP Service Pack 2 Support Tools
ктож его ставит то? он по умолчанию не устанавливается....
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
20.10.2012, 17:02  [ТС] 10
Цитата Сообщение от magirus Посмотреть сообщение
а какая разница, в начале она или в конце?
Высшие админы сказали: "обязательно в начале", но метод научного тыка показал, что разницы нет. Работает и так и сяк.
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
21.10.2012, 21:27 11
но метод научного тыка показал, что разницы нет
Разница может быть, если попадутся исполняемые файлы с одинаковыми именами. Тогда запустится тот, который встретится в папке, которая в списке раньше.

Но открыв реестр, и вручную изменив там это значение, запустить программу по этому пути не удается.
Любой процесс, после запуска получает копию PATH, склееную из системной PATH и пользовательской. При ручном изменении, например, тот же TotalCommander, не будет знать об изменении переменной, т.к. работает с копией. Пока не будет закрыт и запущен заново. То же самое и CMD - если изменить через pathman, то надо ещё и изменить локальную PATH командой SET.

Кстати, вот цитата из хелпа команды SETX:
2) На локальном компьютере переменные, созданные или измененные данным
средством, будут доступны в будущем окне командной строки,
но не в текущем окне CMD.exe.
0
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
21.10.2012, 21:58 12
Smitis, естественно я проверял в новой сессии CMD. Но это не помогло, в отличии от работы команды setX.
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
22.10.2012, 09:47  [ТС] 13
Цитата Сообщение от Smitis Посмотреть сообщение
Разница может быть, если попадутся исполняемые файлы с одинаковыми именами. Тогда запустится тот, который встретится в папке, которая в списке раньше.
В начале батника удаляется из PATH вся информация о предыдущей версии oracle, так что вероятность встречи равна нулю. имхо, админы перестарховывались.
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
23.10.2012, 12:23 14
естественно я проверял в новой сессии CMD. Но это не помогло, в отличии от работы команды setX.
Ради интереса, поискал. По идее, там ещё сообщение WM_SETTINGCHANGE должно рассылаться окнам через SendMessage. Видимо, setx это и делает. Но это ещё и не для всех приложение работает.
http://support.microsoft.com/kb/104011/en-us
0
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
23.10.2012, 13:31 15
Во как! Догадка оказалась верной. Спасибо.

Хорошо бы иметь под руками альтернативу. Может, RunDll32 с особыми параметрами
сумеет сделать обновление.
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
23.10.2012, 14:47 16
Цитата Сообщение от Dragokas Посмотреть сообщение
Во как! Догадка оказалась верной. Спасибо.

Хорошо бы иметь под руками альтернативу. Может, RunDll32 с особыми параметрами
сумеет сделать обновление.
Раньше для обновления после изменений в реестре работало (но на переменных среды не проверял)
Bash
1
rundll32 user32.dll,UpdatePerUserSystemParameters
Начиная с висты, говорят, не работает. Надо проверять, в общем.
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
02.05.2013, 12:34 17
Цитата Сообщение от Dragokas Посмотреть сообщение
переменная будет создана по адресу:
HKEY_CURRENT_USER\Environment\Path
что хоть и перекроет системную переменную HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
но остальные приложения, которые будут записывать новые пути в правильное расположение Path уже будут недоступные.
Ситуация с PATH отлична от других переменных, видимо, в связи с её важностью.
Я бы сформулировал логику работы с переменными так (возможно не прав) - эти записи в реестре ещё не сами переменные, а лишь значения, которые будут присвоены переменным. Сначала берётся системная ветка и создаются переменные. Затем пользовательские, при этом в одноимённых переменных пользовательские значения затирают системные. Но для PATH алгоритм другой - для формирования переменной берётся значение из HKCU, которое объединяется со значением из HKLM. Это легко проверить. У меня, например, есть и пользовательская PATH и системная. Команда set (да и любая функция чтения переменных) показывает, что в path попадают обе части.
1
02.05.2013, 12:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2013, 12:34
Помогаю со студенческими работами здесь

В $MyInvocation исчез параметр path (значение NULL)
Доброго дня! Допиливая скрипт наткнулся на проблему: длительное время отрабатывала строка ...

Где в реестре находится значение переменной PATH?
Всем привет! Подскажите, пожалуйста, где в реестре находится значение переменной PATH? Дело в...

Вместо нуля значение переменной равно некоторой малой величине, как исправить?
Итак, я столкнулся с некоторой проблемой: некоторая функция double sigm_pro(double x) {...

Содержимое переменной PATH
Здравствуйте. Где находится содержимое переменной PATH? Я смотрел содержимое ~/.bashrc,...

Сокращение пути к файлу, x:\path\path\...\path
Помогите с решением такой задачи, желательно до четверга)): Строка длиной не более 1000 символов...

Восстановление переменной среды PATH
Всем привет... На днях угораздило меня изменить данную переменную (удалить то, что там было и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru