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

Автоматически прописать путь к папке в переменную Path

29.04.2013, 20:16. Показов 26790. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: при запуске батник (из условной папки RKwin) должен прописать путь к папке win2 (находящейся в условной папке RKwin) в переменные windows не зависимо от места расположения. Другими словами должен определить полный путь к папке win2 и добавить его в переменную Path.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2013, 20:16
Ответы с готовыми решениями:

Как прописать путь к PATH? Ошибка Error spawning cl.exe
Для сдачи лаб в универе, нужно в ретро среде разработки код скомпилировать, получается вот что...

Как добавить путь в переменную Path ?
Как добавить путь в переменную Path ? Что это? PATH является переменной среды и представляет...

Почему не получается добавить новый путь в переменную Path?
Почему не получается добавить новый путь в переменную Path? Пишет: Т.е. я открываю Мой...

Как прописать путь к папке, чтобы она была доступна на другом ПК
Как прописать путь к папке, чтобы при перемещении на другой компьютер не пришлось, вручную...

14
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
29.04.2013, 20:51 2
Батник запускается из папки RKwin, в которой помимо него находится папка win2?
0
41 / 7 / 2
Регистрация: 07.06.2012
Сообщений: 100
29.04.2013, 20:53  [ТС] 3
Цитата Сообщение от Dragokas Посмотреть сообщение
помимо него находится папка win2?
да но там еще есть несколько папок и файлов
0
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
29.04.2013, 21:25 4
Лучший ответ Сообщение было отмечено как решение

Решение

Bash
1
2
3
4
5
6
7
@echo off
set Key=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
 
set FolderToAdd=%~dp0win2
 
For /f "tokens=2*" %%a In ('Reg.exe query "%key%" /v Path^|Find "Path"') do set CurPath=%%~b
reg.exe add "%Key%" /v Path /t REG_EXPAND_SZ /d "%CurPath%;%FolderToAdd%" /f
Для Windows Vista, 7 скрипт нужно запускать с повышенными правами.

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

Альтернативно, обновление пользовательских параметров можно форсировать запуском утилиты SetX, которая встроена в Windows 7. В остальных версиях распространяется в составе Windows Resourse Kit.

В конце кода нужно дописать:

Bash
1
setx temp "%temp%"
P.S. Здесь же можно хранить и пользовательские переменные, которые необходимо сделать глобальными.
Например, чтобы создать переменную с именем MyVar и значением MyValue,
выполните команду:

Bash
1
Reg Add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment" /v MyVar /t REG_SZ /d "MyValue" /f
5
41 / 7 / 2
Регистрация: 07.06.2012
Сообщений: 100
29.04.2013, 21:34  [ТС] 5
Ух)) все работает!
А то я чет начал мучатся с set path=%path%; но так и не разобрался
0
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
29.04.2013, 21:40 6
Область видимости переменной, заданной Set, является текущая среда интерпретатора, если батник запущен через CMD (и внутри нет команды локализации SetLocal), или сессия самого батника, если двойным кликом по нему.

Не более.
Кстати, поставил памятку сообщению: Исправить значение переменной PATH
чтоб не наткнуться на грабли.
1
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
30.04.2013, 00:04 7
Цитата Сообщение от Dragokas Посмотреть сообщение
Область видимости переменной, заданной Set, является текущая среда интерпретатора, если батник запущен через CMD (и внутри нет команды локализации SetLocal), или сессия самого батника, если двойным кликом по нему.
А также дочерние процессы, запущенный после того, как переменная установлена.
1
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
02.05.2013, 12:36 8
Цитата Сообщение от Dragokas Посмотреть сообщение
Кстати, поставил памятку сообщению: Исправить переменную PATH
чтоб не наткнуться на грабли.
Ответил в той теме.
0
2 / 2 / 0
Регистрация: 20.01.2014
Сообщений: 87
01.03.2014, 03:04 9
угу.. только я в 3 ночи никак не пойму что куда ложить и как работать со скриптом,чтоб добавить эту переменную...
Можно ли хотяб пример какой?
А в особенности,когда имеешь дело со сборками,где вообще нет никаких HKLM
0
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
01.03.2014, 14:56 10
sotik, дык, в статье картинкой показано, куда вводить через интерфейс: Как добавить путь в переменную Path ?
 Комментарий модератора 
Вообще, правилами запрещено осуществлять помощь пользователям с нелицензионной виндой и всякими сборками.

И это вряд ли Вам поможет в доступе к WMI. Кроме файлов, еще должна быть установлена служба winmgmt.
Если в сборке все это вырезано. Вручную Вы ее не установите.
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
03.03.2014, 00:17 11
Цитата Сообщение от sotik Посмотреть сообщение
где вообще нет никаких HKLM
Не бывает такого.
0
102 / 60 / 15
Регистрация: 29.01.2014
Сообщений: 119
06.05.2014, 18:09 12
Цитата Сообщение от Dragokas Посмотреть сообщение
Bash
1
2
3
4
5
@echo off
set Key=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
set FolderToAdd=%~dp0win2
For /f "tokens=2*" %%a In ('Reg.exe query "%key%" /v Path^|Find "Path"') do set CurPath=%%~b
reg.exe add "%Key%" /v Path /t REG_EXPAND_SZ /d "%CurPath%;%FolderToAdd%" /f
Спасибо, так всё действительно работает

Но вот у меня проблема, сделал батничек и есть ошибки, не поможете исправить?

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@set @x=0; /*
@Echo off
VER |>NUL find "6." && if "%~1"=="" cscript.exe //nologo //e:jscript "%~f0"& exit /b
SetLocal EnableExtensions 
Color 17 
CD /D "%~dp0"
Set WinRAR=%ProgramFiles%\WinRAR&Set Zip=%ProgramFiles%\7-Zip& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set WinRAR=%ProgramFiles(x86)%\WinRAR&Set Zip=%ProgramFiles(x86)%\7-Zip
 
:: Здесь добавляем или убираем, что хотим добавить в переменную Path.
echo MyDefault=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;%systemroot%\idmu\common>%temp%\temp.ini
::echo Default=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%systemroot%\idmu\common>>%temp%\temp.ini
::echo Zip=%Zip%>>%temp%\temp.ini
::echo Utilities=%SystemDrive%\Utilities>>%temp%\temp.ini
::echo WinRAR=%WinRAR%>>%temp%\temp.ini
 
if exist "%temp%\temp.ini" (
for /f "tokens=* usebackq" %%i in (%temp%\temp.ini) do (
set "%%i"
call :addpath %%i
)) else (
echo.
echo Не найден файл с настройками...
)
echo %CurPath%>Log.txt
Pause >NUL
2>nul del %temp%\temp.ini
EndLocal
Exit /B
 
:: Для работы скрипта, убираем знак "::" перед 'reg add'
:addpath
if /i "%~1" == "" Exit /b
set Key=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
For /f "tokens=2*" %%a In ('"reg query "%key%" /v Path |Find "Path""') do set CurPath=%%~b
SetLocal EnableDelayedExpansion
if /i "%~1" equ "MyDefault" (set "path=!%~1!") else (set "path=%CurPath%;!%~1!")
IF /i "%~1" neq "Default" (set "path=%CurPath%;!%~1!") else (set "path=!%~1!")
::reg add "%Key%" /v "Path" /t REG_EXPAND_SZ /d "!path!" /f
echo !%~1!
echo.
echo !path!
EndLocal
exit /b 
 
 
*/new ActiveXObject('Shell.Application').ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);
пробема в этих сроках:

Bash
if /i "%~1" == "Default" (set "path=!%~1!") else (set "path=%CurPath%;!%~1!")
Bash
if /i "%~1" == "MyDefault" (set "path=!%~1!") else (set "path=%CurPath%;!%~1!")
Добавлено через 1 час 1 минуту
Воде решил

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
:addpath
if /i "%~1" == "" Exit /b
set var=%~1
set Key=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
For /f "tokens=2*" %%a In ('"reg query "%key%" /v Path |Find "Path""') do set CurPath=%%~b
SetLocal EnableDelayedExpansion
set path=%CurPath%;!%~1!
if /i "%var%" equ "MyDefault"  set path=!%~1!
if /i "%var%" equ "Default" set path=!%~1!
::reg add "%Key%" /v "Path" /t REG_EXPAND_SZ /d "!path!" /f
echo !%~1!
echo.
echo !path!
echo.
echo %var%
EndLocal
exit /b
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
14.08.2016, 10:53 13
Спасибо Dragokas, благодаря его информации сделал универсальный батник для добавления в переменную среды Path своих путей >>

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@echo off
SetLocal EnableExtensions
 
set Key=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
For /f "tokens=2*" %%a In ('Reg.exe query "%Key%" /v Path^|Find "Path"') do set CurPath=%%~b
 
:: //////////////
:: Фильтр на последние символы ";"
:: ///////
call :trim_end_chars "%CurPath%"
goto :NEXT
:trim_end_chars
    set "filtered_String=%~1"
    if "%filtered_String:~-1%" NEQ ";" Exit /B
    call :trim_end_chars "%filtered_String:~0,-1%"
Exit /B
:NEXT
set CurPath=%filtered_String%
 
:: //////////////
:: Универсальное для x86 и x64 - ...\Program Files\
:: ///////
 
set vr=%ProgramFiles%\ConEmu
call set str=%%CurPath:%vr%=%%
if "%str%" == "%CurPath%" set CurPath=%CurPath%;%vr%
 
set vr=%ProgramFiles%\Total Commander\Plugins\exe
call set str=%%CurPath:%vr%=%%
if "%str%" == "%CurPath%" set CurPath=%CurPath%;%vr%
 
:: ///
 
:: //////////////
:: для x64 - ...\Program Files (x86)\
:: ///////
 
:: сверка на 64 битную ОС
if "%ProgramW6432%" == "" goto NEXT
 
set vr=%ProgramFiles(x86)%\ConEmu
call set str=%%CurPath:%vr%=%%
if "%str%" == "%CurPath%" set CurPath=%CurPath%;%vr%
 
set vr=%ProgramFiles(x86)%\Total Commander\Plugins\exe
call set str=%%CurPath:%vr%=%%
if "%str%" == "%CurPath%" set CurPath=%CurPath%;%vr%
 
:NEXT
reg.exe add "%Key%" /v Path /t REG_EXPAND_SZ /d "%CurPath%" /f
 
:: чтобы "схватились" пути  нужно зайти
:: Панель управления - Система и безопасность - Система (или Win+Pause/break) - 
:: Дополнительные параметры - Переменные среды - открыть Path - OK
0
Эксперт WindowsАвтор FAQ
18013 / 7714 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
14.08.2016, 12:57 14
Рад, что Вам пригодилось.

Просто ради ясности понимания:
Цитата Сообщение от Redee Посмотреть сообщение
:: для x64 - ...\Program Files (x86)\
:: ///////
:: сверка на 64 битную ОС
if "%ProgramW6432%" == "" goto NEXT
set vr=%ProgramFiles(x86)%\ConEmu
"%SystemDrive%\Program Files (x86)" - на х64-битной ОС - это 32-битная папка, а не 64, как указано в комментариях.
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
16.08.2016, 11:07 15
все верно на 64ех битной системе ложу в ...\Program Files (x86)\
хотяяяя Вы наверное правы так как на 32ух битных виндовсах от win7 и старше есть обе папки вне зависимости от разрядности...
щас проверю....

Добавлено через 1 минуту
возможно тогда и разрядность не надо будет проверять....

Добавлено через 48 секунд
неувязка конечно может быть с winXP но фиг с ним... пускай пути на 2 папки прогрэмФайлсов будут в Path...

Добавлено через 4 минуты
а нет я прав.... ...\Program Files (x86)\ только на x64 имеется

Добавлено через 1 минуту
я просто убивал 2ух зайцев что может человек распаковать или проинсталить в ...\Program Files (x86)\ на x64 винде....

Добавлено через 2 минуты
то есть добавляю пути относительно ...\Program Files\ -- ПОЛЮБОМУ
а от ...\Program Files (x86)\ опционально только на x64
0
16.08.2016, 11:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2016, 11:07
Помогаю со студенческими работами здесь

Как прописать путь к форме через переменную?
Имеется код: Private Sub Кнопка0_Click() Dim nameField As String nameField =...

Текстовую переменную,в которой находится путь к папке,использовать в функции CreateDirectory()
ПОМОГИТЕ ПОЖАЛУЙСТА! Выводит ошибку что path22 имеет неправильные символы. Вариант @"D:\TEST" -не...

Прописать папку, из которой запущен скрипт, в path
Как прописать в path папку, из которой запущен скрипт? Пробовал так, не сработало: setx path...

Как указать путь к папке и создать массив с ссылками на все файлы в папке?
В моём случае нужно указание директории с видео, создание массива, и тк он будет использоваться в...


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

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