Показать полную графическую версию : Маленькие хитрости автоустановки
Страниц :
1
2
3
4
[
5]
6
7
8
9
10
11
пасибы за ответ, я уже разобрался (причём допетрил сам 8) )..
неправильно вызов делал - start /wait
изменил на call и всё получилось (пришлось почитать малёк про командную строку)
у меня вот какой вопрос - вывод в oeminfo.ini я делаю по маске *.exe из директории
%DVDROM%\I386\SVCPACK
if defined CDROM (
set UPDATESDIR=%CDROM%\I386\SVCPACK
set UPDATESMASK=*.exe
получается нечто такое - ***KB925486 Q828026 qchain***
как исключить из листинга qchain ?
или назначить маски только для KB*.exe и Q*.exe ?
вообще перенести бы мои посты сюда - http://forum.oszone.net/post-495422.html#post495422
а то как-то не в тему.. сорри..
написал маленький батничек для смены буквы для CD\DVD драйвов, рассчитан на русскую WinXP (т.е. подразумевается что diskpart выводит информацию о томах на русском) буду рад если кто-нибудь из знатоков CMD оптимизирует.
Запускать последней командой из runonce:cdassign
rem Создаем текстовый файл с информацией о томах
echo list volume > %temp%\dscript.txt
diskpart /s dscript.txt > %temp%\log.txt
rem Разбираем этот файл построчно, вызывая процедурку для нахождения томов с типом CD и DVD
FOR /F "skip=8 tokens=*" %%A IN (%temp%\log.txt) do @call :findCD "%%A"
del %temp%\log.txt
rem Создаем скрипт для diskpart
FOR %%B IN (%VOL1% %VOL2% %VOL3%) do (
set v=%%B
IF DEFINED v call :chCDlet %%B)
echo list volume >> %temp%\dscript.txt
rem Выполняем скрипт с записью лога работы в %temp%\log.txt
diskpart /s dscript.txt >> %temp%\log.txt
del %temp%\dscript.txt
goto END
:chCDlet
rem Присваиваем CDDVD драйвам в порядке очереди буквы XYZ
If %1==0 set let=X
If %1==1 set let=Y
If %1==2 set let=Z
rem Добавляем команды смены буквы в скрипт diskpart для каждого из драйвов
echo rem Change CDDVD Drive%1 Letter >> %temp%\dscript.txt
echo select volume %1 >> %temp%\dscript.txt
echo assign letter=%let% >> %temp%\dscript.txt
echo Буква CDDVD Привода (Том %1) будет изменена на %let% >> %temp%\log.txt
goto :EOF
:findCD
rem Высчитываем какие тома являются CD/DVD драйвами
rem Присваиваем им переменные VOL#
set line=%~1
set CDNUM=VOL1
IF DEFINED VOL1 set CDNUM=VOL2
IF DEFINED VOL2 set CDNUM=VOL3
If %line:~34,3%==DVD set %CDNUM%=%line:~4,1%
If %line:~34,2%==CD set %CDNUM%=%line:~4,1%
goto :EOF
:ENDПодобным же образом можно менять буквы дисков для каких-то своих разделов, основываясь на метке тома этого раздела, можно и по другому, например я использую встроенную в winxp утилиту mountvol.exe
EgOrus
буду рад если кто-нибудь оптимизируетдобро... тогда вот что получилось, удалось обойтись без временных файлов:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
Rem Выделенные для приводов буквы
SET DRV_FREE=X Y Z
Rem Формируем список устройств, фильтруем переназначенные ранее
FOR /F "skip=9 tokens=*" %%A IN ('@echo list volume^|@diskpart') Do (
SET LINE=%%A
SET DRV_USED=!DRV_USED! !LINE:~13,1!
CALL :FIND !LINE:~13,1! "%DRV_FREE%"
IF !ERRORLEVEL!==1 (
IF "DVD"=="!LINE:~37,3!" SET VOL_WORK=!VOL_WORK! !LINE:~7,1!
IF "CD"=="!LINE:~37,2!" SET VOL_WORK=!VOL_WORK! !LINE:~7,1!
)
)
Rem Перебор отобранных приводов и выполнение переназначения
FOR %%B IN (%VOL_WORK%) DO (
CALL :FindNext
CALL :ASSIGN %%B !LTR!
SET DRV_USED=!DRV_USED! !LTR!
)
EXIT
Rem Вызов команды назначения
:ASSIGN
(@echo select volume %~1&@echo assign letter=%~2)|diskpart
GOTO :EOF
Rem Вызов команды FIND
:FIND
@echo %~2|@find "%~1">nul
GOTO :EOF
Rem Поиск свободной буквы из заданного множества
:FindNext
For %%i in (%DRV_FREE%) Do (
@echo.%DRV_USED%|Find "%%i">nul
IF !ERRORLEVEL!==1 (
SET LTR=%%i
GOTO :EOF
)
)
@echo Скрипт прерван. Список свободных букв исчерпан.
EXIT
ВАЖНО! В русском DiskPart положение значений сдвинуто относительно оригинального, мои смещения сделаны для английского варианта, поэтому нужно откорректировать вхождения на свои: ~7, - номер тома; ~37, - тип тома; ~13, - буква диска.
amel27
Респект, огромное спасибо, как-то даже в голову не пришло сразу использовать разбор вывода команды вместо файла. Мой батничек даже близко не стоит с тем, что сделал ты, ещё учиться и учиться
jimmyboy
08-11-2006, 21:50
Сделайте кто-нибудь пожалуйста оптимизированный вариант для русской винды, а то я в cmd почти ноль :-(
Сделайте кто-нибудь пожалуйста оптимизированный вариант для русской виндыДобавил автоопределение локализации и вынес типы переназначаемых устройств в заголовок. Если смещения изменятся теперь проще подкорректировать... Заменять старый вариант не стал если кто вдруг захочет разобраться в его работе или вдруг вылезет какая ошибка.
echo off
SETLOCAL ENABLEDELAYEDEXPANSION
Rem Тип обрабатываемых приводов и выделенные для них буквы
SET DRV_TYPE=DVD CD
SET DRV_FREE=N O P
Rem Проверка наличия DiskPart
DiskPart.Exe /? >nul 2>&1
IF %ERRORLEVEL% NEQ 0 (
Echo Файл DISKPART.EXE не найден, работа скрипта прервана!
PAUSE
EXIT
)
Rem Определение локализации DiskPart
DiskPart.Exe /?|Find "On computer:"
IF %ERRORLEVEL%==0 (
SET POS_VOL=7
SET POS_LTR=13
SET POS_TYP=37
) ELSE (
SET POS_VOL=4
SET POS_LTR=10
SET POS_TYP=34
)
Rem Формируем список устройств, фильтруем переназначенные ранее
FOR /F "skip=9 tokens=*" %%A IN ('@echo list volume^|@diskpart') Do (
SET LINE=%%A
SET DRV_USED=!DRV_USED! !LINE:~%POS_LTR%,1!
CALL :FIND !LINE:~%POS_LTR%,1! "%DRV_FREE%"
IF !ERRORLEVEL!==1 FOR %%B IN (%DRV_TYPE%) DO CALL :TEST_DRIVE %%B
)
Rem Перебор отобранных приводов и выполнение переназначения
FOR %%B IN (%VOL_WORK%) DO (
CALL :FindNext
CALL :ASSIGN %%B !LTR!
SET DRV_USED=!DRV_USED! !LTR!
)
EXIT
Rem Обработка очередной строки команды DiskPart "list volume"
:TEST_DRIVE
CALL :LENGTH %~1
IF "%~1"=="!LINE:~%POS_TYP%,%LENGTH%!" SET VOL_WORK=!VOL_WORK! !LINE:~%POS_VOL%,1!
GOTO :EOF
Rem Вычисление длины параметра
:LENGTH
SET LENBUF=%~1
SET LENGTH=0
IF "%~1"=="" GOTO :EOF
:LENGTH_START
SET /A LENGTH+=1
IF ""=="!LENBUF:~%LENGTH%,1!" GOTO :EOF
GOTO :LENGTH_START
Rem Вызов команды назначения
:ASSIGN
(@echo select volume %~1&@echo assign letter=%~2)|diskpart
GOTO :EOF
Rem Вызов команды FIND
:FIND
@echo %~2|@find "%~1">nul
GOTO :EOF
Rem Поиск свободной буквы из заданного множества
:FindNext
For %%i in (%DRV_FREE%) Do (
@echo.%DRV_USED%|Find "%%i">nul
IF !ERRORLEVEL!==1 (
SET LTR=%%i
GOTO :EOF
)
)
@echo Скрипт прерван. Список свободных букв исчерпан.
EXIT
jimmyboy
13-11-2006, 13:01
amel27 спасибо за батник :-)
а можно ли сделать так чтобы, этот батник форматировал все неотформатированные разделы в нтфс?
было бы очень удобно, при установке на новые компы :-)
PS: Где можно почитать про пакетные файлы(bat) ?
Phanthom
14-11-2006, 00:17
Доброго времени суток. Я здесь новичёк. Может не в тот топик пишу. Просьба админов переместить куда надо.
У меня 2 небольших проблемы с дистрибом.
1. Не всегда переключаются раскладки клавиатуры как надо. Т.е. в некоторых приложениях переключаются нормально в некоторых вообще отказываются переключаться. В чём ошибка может быть, если не трудно ключиком или батником. (пс пунто свичер стоит и нормально робит, но я ставлю систему таким людям, которые даже не знают что это такое)
2. Не устанавливаются по дэфолту ип-адреса и проч. сетевые настройки. Устанавливается только воркгруппа.
И пара небольших вопросиков на засыпку - ни укого случайно ключиков нету к компасу 8(или хотя бы 7+), алкоголю (выскакивает сообщение о необходимости установки дров на рэйд) и ноду (как к нему обновления можно прикрутить сразуже).
Как очистить автозагрузку из папки all users?
PS РунОнс файл файл ответов и файл с твиками прилагаются - просто убрать расширение txt
jimmyboyспасибо за батник Где можно почитать про пакетные файлы(bat) ?Всегда пожалуйста... вопрос уже поднимался тут: http://forum.oszone.net/thread-71179-2.html
jimmyboy
16-11-2006, 14:16
чета никак не разберусь как этот батник работает
инфы в инете про пакетные файлы мало нашел
может кто распишет как эта фиговина работает? :)
потом попробую переделать ее чтоб винты форматировала :)
Подскажите пожалуйста где можно скачать winrecab.rar и msretime.rar.
По ссылкам скачать не получается, архивы битые.
Кто-нибудь может выложить утилитку CDEject.exe? В этой теме аттач битый, а в инете натыкался только на шараварные подобные проги.
vlastan
Пожалуйста (http://slil.ru/23508283)
qeraser, спасибо, но у меня она почему-то не срабатывает...запускал на компе из командной строки...перепробовал все команды. У кого-нибудь была подобная проблема?
vlastanв инете натыкался только на шараварные подобные прогиAutoIT скрипт устроит?... Легко скомпилировать в EXE или изменить функциональность по желанию:; Читаем параметр командной строки и если обнаружен вызываем функцию,
; переменная окружения ERRORLEVEL устанавливается равной количеству ошибок
; (привод может быть заблокирован Nero или другой программой)
$LastParm = $CmdLine[$CmdLine[0]]
If $LastParm Then
_CDEject ($LastParm)
Exit (@error)
EndIf
; Функция выброса трея CD/DVD привода
; в качестве параметра принимается буква диска или порядковый номер (по алфавиту),
; для обработки всех найденных приводов достаточно передать -1,
; по умолчанию применяется к первому найденному приводу.
;
; Возвращает количество успешно обработанных приводов,
; значение @error устанавливается равным количеству неудач,
; суммарное значение равно количеству обнаруженных приводов.
Func _CDEject ($drive = 1)
Local $i = 1, $err = 0, $aDrives = DriveGetDrive ("CDROM")
If IsArray ($aDrives) Then
For $i = 1 To $aDrives [0]
If ($drive = -1) OR ($drive = $i) OR ($drive & ':' = $aDrives [$i]) Then
If CDTray ($aDrives [$i], "open") =0 Then $err = $err +1
EndIf
Next
EndIf
SetError ($err)
Return $i - $err -1
EndFunc
vlastan
На msfn натыкался на CD_DVD_Switcher (http://www.msfn.org/board/index.php?act=Attach&type=post&id=6586), попробуйте.
Вот первоисточник (http://www.msfn.org/board/index.php?showtopic=25110&hl=CDEject&st=30)
Вариант от amel27 прост и легок. Я бы остановился на нем.
TombAlex
14-12-2006, 11:30
Чтение структуры подкаталогов для создания значения ключа OemPnPDriversPath в winnt.sif.
Надоело значение этого ключа руками переделывать (ошибаюсь часто).
Написал скрипт для этого, не знаю межет кто и делал что-то подобное.
Вот текст vb-скрипта.
'Чтение аргумента коммандной строки
Set objArgs = WScript.Arguments
call readcatname (objArgs(0))
Function readcatname (folderspec)
Dim fso, f, f1, s, sf
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set sf = f.SubFolders
For Each f1 in sf
'Проверка каталога на наличие файлов
Dim fsofol, fl, fo
Set fsofol = CreateObject("Scripting.FileSystemObject")
Set fl = fsofol.GetFolder(f1.path)
Set fo = fl.Files
if fo.Count = 0 Then
else
'Проверка существования лога
Set fsoLogO = CreateObject("Scripting.FileSystemObject")
if (fsoLogO.FileExists("folders.txt")) Then
else
fsoLogO.CreateTextFile "folders.txt"
end if
'Запись имени каталога в файл
Set fsoLog = fsoLogO.GetFile("folders.txt")
Set ts = fsoLog.OpenAsTextStream(8,0)
ts.Write f1 & ";"
ts.Close
end if
'Рекурсивный вызов функции
call readcatname (f1.path)
Next
End function
Эта программа тупо сканирует структуру подкаталогов и пишет их имена последовательно в файл folders.txt в качестве аргумента в коммандной строке необходимо указать подкаталог который необходимо просканировать (в моем случае E:\Distrib\WiXPSP2$OEM$\$1\drivers\), а потом в блокноте с помощью поиска и замены удалить часть путей подкаталогов у меня это выглядит так E:\Distrib\WiXPSP2$OEM$\$1\ заменяем на ничего (не смог я поиск регулярных выражений корректно написать).
Внимание: программа тупая она не понимает сколько символов в названии каталога, так что проверяйте это сами.
...тогда вот еще CMD-вариант решения проблемы построения OemPnPDriversPath:
@Echo Off
SetLocal EnableDelayedExpansion
:: Путь к каталогу с драйверами:
Set ROOT=E:\Distrib\WiXPSP2\$OEM$\$1\OEMDRV
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:~1%
TombAlex
15-12-2006, 05:23
Доделаный скрипт для построения OemPnPDriversPath
Теперь выдает готовую строку в файл folders.txt (переделывать ни чего не надо)
Также выполняет проверку соответствия имен каталогов формату 8.3, если не соответствует сообщит где ошибка.
Set objArgs = WScript.Arguments
If objArgs.length = 0 Then
MsgBox "Не задан каталог", 16, "Выполнение прервано"
WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(objArgs(0)) Then
MsgBox "Каталог не существует", 16, "Выполнение прервано"
WScript.Quit
End If
Set fsoLogO = CreateObject("Scripting.FileSystemObject")
if (fsoLogO.FileExists("folders.txt")) Then
Set fsoLog = fsoLogO.GetFile("folders.txt")
fsoLog.Delete
fsoLogO.CreateTextFile "folders.txt"
else
fsoLogO.CreateTextFile "folders.txt"
end if
Dim pfso, pf, psf, regEx
Set pfso = CreateObject("Scripting.FileSystemObject")
Set pf = pfso.GetFolder(objArgs(0))
Set psf = pf.Parentfolder
Set regEx = New RegExp
regEx.Pattern = "\\"
regEx.IgnoreCase = True
regEx.Global = True
rpatrn = regEx.Replace(psf.path, "\\")
regEx.Pattern = "\$"
rpatrn = regEx.Replace(rpatrn, "\S")
cn=0
call readcatname (objArgs(0), rpatrn)
Function readcatname (folderspec, rpatrn)
Dim fso, f, f1, s, sf, regEx
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set sf = f.SubFolders
For Each f1 in sf
If UCase(f1.Name) <> UCase(f1.ShortName) Then
MsgBox "Имя каталога не соответствует формату 8.3" & Chr(13) & f1.Path & Chr(13) & f1.Name,_
16, "Выполнение прервано"
WScript.Quit
End If
Dim fsofol, fl, fo
Set fsofol = CreateObject("Scripting.FileSystemObject")
Set fl = fsofol.GetFolder(f1.path)
Set fo = fl.Files
if fo.Count = 0 Then
else
Set fsoLogO = CreateObject("Scripting.FileSystemObject")
Set fsoLog = fsoLogO.GetFile("folders.txt")
Set ts = fsoLog.OpenAsTextStream(8,0)
Set regEx = New RegExp
regEx.Pattern = rpatrn & "\\"
regEx.IgnoreCase = True
sname = regEx.Replace(f1 , "")
if cn = 0 Then
cn = 1
else
ts.Write ";"
End If
ts.Write sname
ts.Close
End if
call readcatname (f1.path, rpatrn)
Next
End function
amel27Rem Выделенные для приводов буквы
SET DRV_FREE=X Y ZГде-то когда-то на Майкрософте в КБ было, что, мол, буковка Z используется при выполнении батников ("скриптов входа") при сетевом логоне...
Правда, не помню, к каким версиям Виндов применимо...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC