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

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

netsupport 18-06-2010 15:31 1436821

скрипт записи devicepath
 
У меня по сети расшарены драйвера и требуется чтобы они устанавливались автоматически, но
OemPnPDriversPath в файле ответов не подходит т.к. windows автоматически подставляет туда системную переменную %systemdrive%
а у меня сетевые пути типа: \\192.168.200.1\drivers\c\a

задача такова, скрипт(что-то вроде этого http://forum.oszone.net/showthread.p...th#post1172464)
сканирует заданную папку(в нашем случае drivers) и создаёт путь к каждой папке где содержится inf файл только в алфавитном порядке( т.е. сначало drivers\c а потом уже drivers\l)
к каждому пути добавляется \\192.168.200.1 например ввиде переменной %serveraddress%
в итоге получается список вида: \\192.168.200.1\drivers\c\a;\\192.168.200.1\drivers\c\b;\\192.168.200.1\drivers\c\c и т.д.

Эта информация записывается в reg файл в DevicePath="" параметр который находится в HKLM\Software\Microsoft\Windows\CurrentVersion

господа помогите реализовать данный скрипт (:

netsupport 19-06-2010 09:13 1437285

неужели никто не сталкивался с этим?

zonderz 19-06-2010 16:42 1437477

netsupport,

setdevicepath.exe

вы не пользуетесь поиском и задаете вопросы, обсуждавшиеся тысячи раз... и так во всех ваших темах... поэтому вам никто и не отвечает подолгу...

netsupport 21-06-2010 12:49 1438521

zonderz,
я честно вбивал в поиск и в этом раздел и в разделе Автоматической установки "devicepath" но ничего не находилось, сейчас конечно ещё попытаюсь но пока не могу найти обсуждения этой темы

netsupport 21-06-2010 14:45 1438643

Есть скрипт
Код:

@Echo Off
SetLocal EnableDelayedExpansion

Set ROOT=C:\Drivers
Set WSIF=C:\TEST\winnt.sif

PUSHD %ROOT%
For %%i In ("%ROOT%") Do If Exist %%i (Set ROOT=%%~si&Set $R=%%~nxsi) Else Exit
For /F "Delims=" %%i In ('DIR /B/S/A:D *') DO (
  Set $D=%%~si
  If Exist !$D!\*.inf Set OemPnPDriversPath=!OemPnPDriversPath!;!$R!!$D:%ROOT%=!
)

Echo [Unattended]>>"%WSIF%"
Echo OemPnPDriversPath="%OemPnPDriversPath:~1%">>"%WSIF%"

Мне просто нужно помочь сделать вывод путей в нужное место в reg файле и чтобы в начале каждого пути подставлялся нужный мне путь(в данном случае \\192.168.200.1


Добавлено:
Поправил скрипт чтобы выводил результаты в команду которая добавляет изменения в реестре:



SetLocal EnableDelayedExpansion

Set ROOT=D:\Drivers\c
set DIR=%systemroot%\inf
PUSHD %ROOT%
For %%i In ("%ROOT%") Do If Exist %%i (Set ROOT=%%~si&Set $R=%%~nxsi) Else Exit
For /F "Delims=" %%i In ('DIR /B/S/A:D *') DO (
Set $D=%%~si
If Exist !$D!\*.inf Set OemPnPDriversPath=!OemPnPDriversPath!;!$R!!$D:%ROOT%=!
)

Echo OemPnPDriversPath="%OemPnPDriversPath:~1%">>"%DIR%"

REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion /v DevicePath /t REG_EXPAND_SZ /d %DIR% /f

pause

Но не работает. если посмотреть вывод в командной строке, то:

D:\drivers\c>Echo OemPnPDriversPath="c\A;c\A2;c\A4;c\A5;c\A6;c\A7;c\Ak;c\At;c\D;
c\E;c\F;c\H;c\I;c\I4;c\I5;c\I6;c\Ia;c\Ib;c\Ic;c\Id;c\Ie;c\IN;c\IT;c\K;c\N;c\N1;c
\N2;c\N3;c\N4;c\S;c\T;c\U;c\V;c\V2;c\V3;c\VX;c\I2\1;c\I2\2;c\I2\3;c\I2\4;c\I2\5"
1>>"C:\Windows\inf"
Отказано в доступе.


В DevicePath добавляется в итоге просто текст C:\Windows\inf

netsupport 21-06-2010 17:44 1438796

фух, после многих модификацией и проверок готово.
В итоге скрипт выглядит так:
SetLocal EnableDelayedExpansion

Set ROOT=D:\Drivers\c
set DIR=%systemroot%\inf
PUSHD %ROOT%
For %%i In ("%ROOT%") Do If Exist %%i (Set ROOT=%%~si&Set $R=%%~nxsi) Else Exit
For /F "Delims=" %%i In ('DIR /B/S/A:D *') DO (
Set $D=%%~si
If Exist !$D!\*.inf Set OemPnPDriversPath=!OemPnPDriversPath!;!$R!!$D:%ROOT%=!
)

REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion /v DevicePath /t REG_EXPAND_SZ /d %OemPnPDriversPath:~1% /f

pause


Но нужно перед каждым путём добавлять один и тот же нужны путь т.е. в моём случаи как раз сетевой путь(в моём случае это \\192.168.200.1\drivers) пока не могу понять как

amel27 22-06-2010 10:50 1439193

Цитата:

Цитата netsupport
нужно перед каждым путём добавлять один и тот же нужны путь »

Код:

Set ROOT=D:\Drivers\c
Set NETP=\\192.168.200.1\Drivers
Set DevicePath=%%systemroot%%\inf

PushD %ROOT%|| Exit
For %%i In ("%ROOT%") Do Set ROOT=%%~si
For /F "Delims=" %%i In ('DIR /B/S/AD *') DO If Exist %%~si\*.inf (
Set $D=%%~si& Call Set DevicePath=%%DevicePath%%;%NETP%%%$D:%ROOT%=%%)

REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion /v DevicePath /t REG_EXPAND_SZ /d "%DevicePath%" /f


netsupport 22-06-2010 13:46 1439317

Ммм..что-то не так формируется, т.е. лишняя "Y:\", по мне так надо просто убрать из скрипта "$D:", но это не помогает ((

Код:

Set ROOT=\\77.50.100.46\drivers\c
Set NETP=\\77.50.100.46\drivers\
Set DevicePath=%%systemroot%%\inf

PushD %ROOT%|| Exit
For %%i In ("%ROOT%") Do Set ROOT=%%~si
For /F "Delims=" %%i In ('DIR /B/S/AD *') DO If Exist %%~si\*.inf (
Set $D=%%~si& Call Set DevicePath=%%DevicePath%%;%NETP%%%$D:%ROOT%=%%)

REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion /v DevicePath /t REG_EXPAND_SZ /d "%DevicePath%" /f

pause

Получается так:
%systemroot%\inf;\\77.50.100.46\drivers\Y:\c\A;\\77.50.100.46\drivers\Y:\c\A2;\\77.50.100.46\drivers \Y:\c\A4; и т.д.

amel27 22-06-2010 16:19 1439424

Цитата:

Цитата netsupport
Set ROOT=\\77.50.100.46\drivers\c
Set NETP=\\77.50.100.46\drivers\ »

как-то не совсем стыкуется с предыдущими постами
Код:

Set NET=\\77.50.100.46\Drivers
Set DIR=\\77.50.100.46\Drivers\c

Set DevicePath=%%SystemRoot%%\inf
PUSHD %DIR%

For /F "Delims=" %%i In ('DIR /B/S/AD *') Do If Exist "%%i\*.inf" Call Set "DevicePath=%%DevicePath%%;%NET%%%~pnxi"
REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion /v DevicePath /t REG_EXPAND_SZ /d "%DevicePath%" /f


netsupport 22-06-2010 17:39 1439503

Как, то странно получается
я не могу указывать в DIR всё папку drivers это слишком много драйверов
мне надо указываь Set DIR=\\77.50.100.46\Drivers\с

соответственно я тогда указываю
Set NET=\\77.50.100.46\drivers
чтобы "drivers" фигурировал в пути


в итоге формируется ерунда:
"%SystemRoot%\inf;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50.100.46\drivers\c;\\77.50 .100.46\drivers\c;\\77.50.100.46\drivers\c\I2;\\77.50.100.46\drivers\c\I2;\\77.50.100.46\drivers\c\I 2;\\77.50.100.46\drivers\c\I2;\\77.50.100.46\drivers\c\I2"

zonderz 22-06-2010 17:57 1439519

Цитата:

Цитата netsupport
я честно вбивал в поиск и в этом раздел и в разделе Автоматической установки "devicepath" но ничего не находилось, сейчас конечно ещё попытаюсь но пока не могу найти обсуждения этой темы »

попробуйте программу из поста http://forum.oszone.net/post-1437477.html#post1437477 и сообщите о результате...

netsupport 22-06-2010 18:25 1439555

Цитата:

Цитата zonderz
попробуйте программу из поста »

Мне бы хотелось всё таки закончить и работать со скриптом ибо нормальной документации по этой программе я не нашёл, она используется в скриптах установки Башрат драйверов

amel27 23-06-2010 07:25 1439863

Цитата:

Цитата netsupport
Как, то странно получается »

исправил

netsupport 23-06-2010 09:48 1439926

Цитата:

Цитата amel27
исправил »

вставил полностью код из 9-го поста

В итоге батник спрашивает разрешение на перезапись параметра DevicePath в реестре, хотя /f стоит. причём /f также записывает в реестр, пути повторяются и первый путь почему-то
\\77.50.100.46\drivers\c хотя там нету inf файла(:

вот последний вывод из работы батника:
Y:\c>REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion /v DevicePath /t REG
_EXPAND_SZ /d "%SystemRoot%\inf;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers
\c\A;\\77.50.100.46\Drivers\c\A;\\77.50.100.46\Drivers\c\A;\\77.50.100.46\Driver
s\c\A;\\77.50.100.46\Drivers\c\A;\\77.50.100.46\Drivers\c\A;\\77.50.100.46\Drive
rs\c\A;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Driver
s\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\
c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers
\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Driver
s\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drive
rs\c\I;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Driver
s\c\N;\\77.50.100.46\Drivers\c\N;\\77.50.100.46\Drivers\c\N;\\77.50.100.46\Drive
rs\c\N;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Driver
s\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\V;\\77.50.100.46\Drivers
\c\V;\\77.50.100.46\Drivers\c\V;\\77.50.100.46\Drivers\c\I2\;\\77.50.100.46\Driv
ers\c\I2\;\\77.50.100.46\Drivers\c\I2\;\\77.50.100.46\Drivers\c\I2\;\\77.50.100.
46\Drivers\c\I2\" /f
Value DevicePath exists, overwrite(Y/N)? y

amel27 23-06-2010 11:38 1440005

Цитата:

Цитата netsupport
В итоге батник спрашивает разрешение на перезапись параметра DevicePath в реестре, хотя /f стоит. причём /f также записывает в реестр, пути повторяются и первый путь почему-то »

почему как раз ясно... потому что начиная с какого-то пути перестал удаляться оконечный слэш, он и экранировал вторую закрывающую кавычку... возможно, где-то в имени каталога драйвера встретился пробел или спецсимвол, добавил кавычки в SET - пробуйте

netsupport 23-06-2010 11:47 1440009

Нет, ни в одном названии папки или подпапки нету пробела или спец символа в названиях папок буквы a-z и цифры 0-10
пробую.

Такс. /f срабатывает тут всё нормально.
но пути неверно непонятно
вот что получилось:
%SystemRoot%\inf;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\A;\\77.50.100.46\Drivers\c\A;\\7 7.50.100.46\Drivers\c\A;\\77.50.100.46\Drivers\c\A;\\77.50.100.46\Drivers\c\A;\\77.50.100.46\Drivers \c\A;\\77.50.100.46\Drivers\c\A;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\D rivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\I;\\77.50.100 .46\Drivers\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers\c\I;\\7 7.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers \c\I;\\77.50.100.46\Drivers\c\I;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\D rivers\c\N;\\77.50.100.46\Drivers\c\N;\\77.50.100.46\Drivers\c\N;\\77.50.100.46\Drivers\c\N;\\77.50. 100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77.50.100.46\Drivers\c\;\\77 .50.100.46\Drivers\c\V;\\77.50.100.46\Drivers\c\V;\\77.50.100.46\Drivers\c\V;\\77.50.100.46\Drivers\ c\I2\;\\77.50.100.46\Drivers\c\I2\;\\77.50.100.46\Drivers\c\I2\;\\77.50.100.46\Drivers\c\I2\;\\77.50 .100.46\Drivers\c\I2\;

В папке \\77.50.100.46\Drivers\c\ не содержится inf файл в ней содержаться папки уже в которых inf файлы
\\77.50.100.46\Drivers\c\A; - всё верно
\\77.50.100.46\Drivers\c\A; тут поидее должна быть папка A2
такое ощущение что обрезаются цифры в названии папок, но не у всех..
Вообщем для наглядности вот список папок в папке \\77.50.100.46\drivers\c:
A
A2
A4
читать дальше »

A5
A6
A7
Ak
At
D
E
F
H
I
I2
I4
I5
I6
Ia
Ib
Ic
Id
Ie
IN
IT
K
N
N1
N2
N3
N4
S
T
U
V
V2
V3
VX

amel27 23-06-2010 12:24 1440031

netsupport, уже сам сообразил... туплю по тихой - проще было написать с нуля чем править =)

netsupport 23-06-2010 12:46 1440049

amel27 ура! заработало.
жалко что есть ограничение на входную строку, т.е. если указать всё папку Drivers(Башарт драйвера на чипсет,звук,видео,сеть), то скрипт не завершиться т.к. слишком длинная строка ((

будем думать как соединить все inf файлы в один inf, надеюсь на форуме найдётся решение (:

Ну и на том пока хорошо:) спс


Время: 03:04.

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