Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Добавление пути(ей) в системные переменные (path) с помощью cmd-файла (http://forum.oszone.net/showthread.php?t=96766)

bearmvz 25-12-2007 11:32 703454

Добавление пути(ей) в системные переменные (path) с помощью cmd-файла
 
Добрый день!
Возникла такая задача. Подскажите, как реализовать сие.
Необходимо с помощью cmd-файла добавить в (переменные среды-системные переменные) в строку (path) путь (возможно несколько путей или сетевые путь(и)).
Они ,как я помню, разделяются с помощью ;.
Я попытался через cmd-файл:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %\\server\folder\folder1\%
Но она заменяет уже существующий path.
А нужно лишь добавить.
Заранее благодарю за помощь.

Blast 25-12-2007 11:36 703459

PHP код:

@echo off
rem какой путь нужно дописать в переменную Path
set addtopath
=%ProgramFiles%7-Zip
rem извлечение текущего содержимого переменной Path
rem 
!ВАЖНО! - в кач-ве разделителя нужно указать только символ табуляции
rem 
(ASCII-код символа после знака "равно" в выделенном фрагменте должен быть 09)
for /
"tokens=3 delims=    " %%j in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path') do (set curpath=%%j)
rem проверка наличия дописываемого значения в переменной Path (для избежания дублирования)
for /
%%j in ('echo %curpath% ^| find /C /I "%addtopath%"') do (set isinpath=%%j)
rem если дописываемого пути нет в переменной Pathто дополняем ее
if %isinpath% == (
    
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /"%curpath%;%addtopath%" /f


Источник

LITBe 08-11-2010 10:22 1537443

Не нашёл здесь на сайте поэтому напишу сюда, вдруг кому ещё пригодится.
Вобщем проблема была в том что этот скрипт на windows 7 не отрабатывал, пытался его подправить но ничего не получилось, пришлось искать что-то похожее на VBscript и править его, в итоге вот скрипт работает и на ХР и на 7. Проверяет есть ли уже данное значение в переменной Path и если нету то дописывает:

Dim ExistingPath, NewPath, PathElement, PathExists, OldPath
Set oShell = WScript.CreateObject("WScript.Shell")
Set oEnv = oShell.Environment("SYSTEM")
' Строчка/папка которую надо добавить у меня это %Program Files%
PathToAdd = "%Program Files%"

OldPath = Split(oENV("path"), ";", -1, vbTextCompare)
PathExists = False
For Each PathElement In OldPath
If StrComp(PathElement, PathToAdd, vbTextCompare) = 0 Then
PathExists = True

Exit For
End If
Next

If Not PathExists Then


ExistingPath = oEnv("PATH")
' добавляем нашу строчку у меня это %Program Files%
NewPath = ExistingPath & ";" & "%Program Files%"
oEnv("PATH") = NewPath


End If

gora 08-11-2010 22:18 1538047

Цитата:

Цитата LITBe
проблема была в том что этот скрипт на windows 7 не отрабатывал »

Подправил, теперь работает и на Win 7
Код:

@Echo Off
rem какой путь нужно дописать в переменную Path
Set InstPath=%ProgramFiles%\7-Zip

Set sw="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Set w7=
rem проверка версии (Windows 7) установленной системы
Ver | Find "6.1" >Nul && Set w7=1
rem извлечение текущего содержимого переменной Path
rem !ВАЖНО! - в кач-ве разделителя в первом цикле используется пробел, а во втором нужно указать
rem только символ табуляции (ASCII-код символа после знака "равно" в выделенном фрагменте должен быть 09)
If Defined w7 (
        For /F "tokens=3* delims= " %%j In ('Reg Query %sw% /v Path') Do Set curpath=%%j %%k
) Else (
        For /F "tokens=3 delims=        " %%j In ('Reg Query %sw% /v Path') Do Set curpath=%%j
)
rem проверка наличия дописываемого значения в переменной Path (для исключения дублирования)
rem если дописываемого пути нет в переменной Path, то дополняем ее
Echo "%curpath%" | Find /I "%InstPath%" >Nul || Reg Add %sw% /v Path /t REG_EXPAND_SZ /d "%curpath%;%InstPath%" /f


Fresh96 26-11-2011 16:37 1803815

gora, не могли бы Вы модифицировать cmd, таким образом, чтобы можно было добавить сразу 3 пути в path.
Не очень охота запускать cmd три раза с разными путями.

Заранее спасибо.

gora 26-11-2011 17:18 1803828

Цитата:

Цитата Fresh96
сразу 3 пути в path »

Код:

@Echo Off
rem список путей, которые нужно дописать в переменную Path
For %%a In (
        "%ProgramFiles%\7-Zip"
        "%ProgramFiles%\EmEditor"
        "%ProgramFiles%\WinRAR"
) Do Call :_addPath %%a
Exit

:_addPath
Set sw="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
For /F "tokens=2*" %%j In ('Reg Query %sw% /v Path ^| Find /I "Path"') Do Set type=%%j& Set curpath=%%k
Echo "%curpath%" | Find /I "%~1" >Nul && GoTo :EOF
Reg Add %sw% /v Path /t %type% /d "%curpath%;%~1" /f
GoTo :EOF


CyberMuesli 18-06-2012 23:40 1936612

1. В win7 есть команда setx

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

kiripanda 19-06-2012 00:01 1936626

Вы сами ответили на свой вопрос – скопировать на ХР файл setx.exe

Iska 19-06-2012 04:02 1936677

Windows 2000 Resource Kit Tools for administrative tasks
Download: Windows 2000 Resource Kit Tool : SetX (setx.exe) - Microsoft Download Center - Download Details

Mancoffee 05-08-2012 14:51 1965042

gora, это работает, только комментарий тоже в Path добавляет :).

gora 05-08-2012 15:21 1965051

Mancoffee, поправил


Время: 04:52.

Время: 04:52.
© OSzone.net 2001-