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

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

shao 29-08-2011 03:38 1741342

Пакетное копирование и регистрация .DLL и .INF
 
Коллеги, есть две папки. В одной - .inf файлы, во второй - .dll
Нужно их скопировать в определённые директории и зарегистрировать. Все, пакетом.
Как это можно сделать используя скриптовые языки. (Желательно средствами CMD/BAT) ?

Путь для копирования:
Код:

%windir%\inf
и
%windir%\system32

соответственно...

Спасибо!

Iska 29-08-2011 05:37 1741360

shao, поясните пожалуйста, что значит «зарегистрировать»? Про *.dll ещё понятно; наверное это:
Код:

regsvr32.exe <bla-bla-bla.dll>
(если в *.dll наличествует соответствующая функция). Или это какие-то драйвера (судя по совместному упоминанию inf-dll)?

А *.inf? К ним понятие «зарегистрировать» вроде как нельзя отнести. Речь идёт про Install?
Код:

rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 <bla-bla-bla.inf>
Про Active Install?
Код:

rundll32.exe advpack.dll,LaunchINFSection <bla-bla-bla.inf>, DefaultInstall
Дайте чуть более подробную информацию о том, что сие вообще есть.

shao 29-08-2011 08:00 1741393

Iska, извините , пропустил в фразе
Цитата:

Цитата shao
Нужно их скопировать в определённые директории и зарегистрировать. »

.....
Нужно было так
Цитата:

Цитата shao
Нужно их скопировать в определённые директории инсталлировать и зарегистрировать. »

- писал полусонный (работа....). ну Вы и так всё поняли и откорректировали :)

Подробнее:
Рассмотрим вариант, где это - пакет драйверов.
DLL-ки имеют соответствующую функцию для регистрации,
а *.inf - если можно - рассмотрим два варианта: - как Вы указали.
Install и Active Install..
Папки: 0011 и 0022.
В них, соответственно 001.inf, 002.inf.....020.inf и 001.dll, 002.dll.........020.dll - если уж поподробнее.......

как регистрировать и инсталлировать через regsvr32, setupapi , advpack - понятно.
Не понятно , как это сделать пакетно. Все сразу с копированием в нужную директорию.

Ну, например :
Код:

xcopy /y "0022\*.dll" "%windir%\system32"
,а как зарегистрировать именно те файлы , которые были скопированы ?

SendMessage 29-08-2011 14:10 1741609

Цитата:

Цитата shao
Ну, например :
Код:
xcopy /y "0022\*.dll" "%windir%\system32"
,а как зарегистрировать именно те файлы , которые были скопированы ? »

Код:

for /f "delims=" %%a in ('xcopy /y "0022\*.dll" "%windir%\system32\" ^| findstr /i "\\.*\.dll"') do regsvr32.exe /s "%windir%\system32\%%~nxa"

SendMessage 29-08-2011 15:49 1741736

Наверное, "%windir%\system32\%%~nxa" - лишнее. Можно просто "%%~nxa".
regsvr32 без маршрута регистрирует библиотеки именно в системной папке.

shao 29-08-2011 18:27 1741866

SendMessage,
копируется, но не регистрируется !
Убрал " s " в " regsvr32.exe /s " - нет запроса на подтверждение регистрации.....

SendMessage 30-08-2011 00:53 1742182

shao, не могу воспроизвести Вашу ошибку. У меня все работает.

Цитата:

Цитата shao
нет запроса на подтверждение регистрации..... »

Запроса и не должно быть - только сообщение об успешной регистрации. Или же собщение о неуспешности.
Если ничего нет - значит у Вас не отрабатывает regsvr32. Попробуйте указать полный маршрут к нему.

shao 30-08-2011 17:48 1742640

Цитата:

Цитата SendMessage
Запроса и не должно быть - только сообщение об успешной регистрации. Или же собщение о неуспешности »

Ни того, ни другого - не было !
Попробую прописать путь......

UPD:

Сделал так :
Код:

for /f "delims=" %%a in ('xcopy /y "*.dll" "%windir%\system32\" ^| findstr /i "\\.*\.dll"') do %windir%\system32\regsvr32.exe /s "%windir%\system32\%%~nxa"
Без изменений. Копируется , но не регистрируется.
Если указываю каждый файл:
Код:

regsvr32.exe /s %windir%\system32\001.dll
Тогда всё в порядке - регистрация проходит.....

El Sanchez 30-08-2011 18:33 1742676

shao, а так:
Код:

for /f "delims=" %%a in ('xcopy /y "*.dll" "%windir%\system32\" ^| findstr /i "[.]dll$"') do %windir%\system32\regsvr32.exe /s "%windir%\system32\%%~nxa"

shao 30-08-2011 19:14 1742711

Цитата:

Цитата El Sanchez
shao, а так: »

А так - :up
Отлично, работает ! спасибо!

Ещё два вопроса пожалуйста:

1. Можете объяснить эти:
Код:

...^| findstr /i ".dll"...
Код:

^| findstr /i "\\.*\.dll"
куски кода и этот:
Код:

"%windir%\system32\%%~nxa"
"а" - это атрибуты ? Зачем ?

2.Install и Active Install для *.inf как реализовать ?
просто изменить в Вашем коде соответствующую команду и расширение ?

El Sanchez 30-08-2011 20:51 1742788

Цитата:

Цитата shao
Можете объяснить эти: »

shao, xcopy пишет пути (ну почти) копируемых файлов в консоль плюс сообщение о том сколько скопировано файлов. При помощи операции piping (символ | между 2 командами) мы вывод xcopy передаем не в консоль, а на вход команды findstr с регулярным выражением (фильтр). Просто ищем во выходном потоке xcopy строки, заканчивающиеся на .dll. Кстати, я исправил регулярное выражение на корректное в предыдущем сообщении.

Цитата:

Цитата shao
"а" - это атрибуты ? Зачем ? »

%a - переменная, используемая в for, содержащая путь копируемого файла, т.е. то, что выдала связка xcopy|findstr, ~nx - это модификаторы переменной (выделяют имя и расширение из пути). Подробнее for /?

Цитата:

Цитата shao
.Install и Active Install для *.inf как реализовать ? »

Например, Install
Код:

for /f "delims=" %%a in ('xcopy /y "*.inf" "%windir%\system32\" ^| findstr /i "[.]inf$"') do %windir%\system32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 "%windir%\system32\%%~nxa"

shao 30-08-2011 21:52 1742841

Цитата:

Цитата El Sanchez
Кстати, я исправил регулярное выражение на корректное в предыдущем сообщении. »

Я это заметил - потому и спросил , как работает код :)

Скажите , а почему в Install так:
Код:

^| findstr /i "[.]inf$"
?
А так, нельзя ?
Код:

^| findstr /i ".inf"

Iska 31-08-2011 01:39 1742944

Цитата:

Цитата shao
А так, нельзя ? »

Цитата:

Цитата findstr.exe /?

Краткая сводка по синтаксису регулярных выражений:
. Любой символ.

$ Позиция в строке: конец строки

[x-y] Диапазон: любые символы из указанного диапазона

т.е., без скобок точка будет восприниматься не как обычный символ, а как символ шаблона, и весь шаблон «".inf"» будет совпадать с «ainf», «binf», «cinf», … «zinf», «0inf», …«9inf» и т.п. Без указания «$» — с «.infabcde», «.inffffff», «.infbla-bla-bla»


Время: 07:58.

Время: 07:58.
© OSzone.net 2001-