Показать полную графическую версию : [решено] скрипт записи devicepath
netsupport
18-06-2010, 15:31
У меня по сети расшарены драйвера и требуется чтобы они устанавливались автоматически, но
OemPnPDriversPath в файле ответов не подходит т.к. windows автоматически подставляет туда системную переменную %systemdrive%
а у меня сетевые пути типа: \\192.168.200.1\drivers\c\a
задача такова, скрипт(что-то вроде этого http://forum.oszone.net/showthread.php?p=1172464&highlight=OemPnPDriversPath#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
неужели никто не сталкивался с этим?
netsupport,
setdevicepath.exe
вы не пользуетесь поиском и задаете вопросы, обсуждавшиеся тысячи раз... и так во всех ваших темах... поэтому вам никто и не отвечает подолгу...
netsupport
21-06-2010, 12:49
zonderz,
я честно вбивал в поиск и в этом раздел и в разделе Автоматической установки "devicepath" но ничего не находилось, сейчас конечно ещё попытаюсь но пока не могу найти обсуждения этой темы
netsupport
21-06-2010, 14:45
Есть скрипт
@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
фух, после многих модификацией и проверок готово.
В итоге скрипт выглядит так:
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) пока не могу понять как
нужно перед каждым путём добавлять один и тот же нужны путь »
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
Ммм..что-то не так формируется, т.е. лишняя "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; и т.д.
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
Как, то странно получается
я не могу указывать в 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\I2 ;\\77.50.100.46\drivers\c\I2;\\77.50.100.46\drivers\c\I2"
я честно вбивал в поиск и в этом раздел и в разделе Автоматической установки "devicepath" но ничего не находилось, сейчас конечно ещё попытаюсь но пока не могу найти обсуждения этой темы »
попробуйте программу из поста http://forum.oszone.net/post-1437477.html#post1437477 и сообщите о результате...
netsupport
22-06-2010, 18:25
попробуйте программу из поста »
Мне бы хотелось всё таки закончить и работать со скриптом ибо нормальной документации по этой программе я не нашёл, она используется в скриптах установки Башрат драйверов
Как, то странно получается »исправил
netsupport
23-06-2010, 09:48
исправил »
вставил полностью код из 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
В итоге батник спрашивает разрешение на перезапись параметра DevicePath в реестре, хотя /f стоит. причём /f также записывает в реестр, пути повторяются и первый путь почему-то »почему как раз ясно... потому что начиная с какого-то пути перестал удаляться оконечный слэш, он и экранировал вторую закрывающую кавычку... возможно, где-то в имени каталога драйвера встретился пробел или спецсимвол, добавил кавычки в SET - пробуйте
netsupport
23-06-2010, 11:47
Нет, ни в одном названии папки или подпапки нету пробела или спец символа в названиях папок буквы 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
netsupport, уже сам сообразил... туплю по тихой - проще было написать с нуля чем править = )
netsupport
23-06-2010, 12:46
amel27 ура! заработало.
жалко что есть ограничение на входную строку, т.е. если указать всё папку Drivers(Башарт драйвера на чипсет,звук,видео,сеть), то скрипт не завершиться т.к. слишком длинная строка ((
будем думать как соединить все inf файлы в один inf, надеюсь на форуме найдётся решение (:
Ну и на том пока хорошо:) спс
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.