Маленькие хитрости автоустановки

Ответить
Аватара пользователя
amel27

Re: Маленькие хитрости автоустановки

Сообщение amel27 »

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, - буква диска.
Аватара пользователя
EgOrus

Re: Маленькие хитрости автоустановки

Сообщение EgOrus »

amel27

Респект, огромное спасибо, как-то даже в голову не пришло сразу использовать разбор вывода команды вместо файла. Мой батничек даже близко не стоит с тем, что сделал ты, ещё учиться и учиться
Аватара пользователя
EgOrus

Re: Маленькие хитрости автоустановки

Сообщение EgOrus »

Сделайте кто-нибудь пожалуйста оптимизированный вариант для русской винды, а то я в cmd почти ноль :-(
Аватара пользователя
jimmyboy

Re: Маленькие хитрости автоустановки

Сообщение jimmyboy »

Цитата:



Сделайте кто-нибудь пожалуйста оптимизированный вариант для русской винды



Добавил автоопределение локализации и вынес типы переназначаемых устройств в заголовок. Если смещения изменятся теперь проще подкорректировать... Заменять старый вариант не стал если кто вдруг захочет разобраться в его работе или вдруг вылезет какая ошибка.



Код:

Код: Выделить всё

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

Re: Маленькие хитрости автоустановки

Сообщение jimmyboy »

amel27 спасибо за батник :-)



а можно ли сделать так чтобы, этот батник форматировал все неотформатированные разделы в нтфс?

было бы очень удобно, при установке на новые компы :-)



PS: Где можно почитать про пакетные файлы(bat) ?
Аватара пользователя
Phanthom

Re: Маленькие хитрости автоустановки

Сообщение Phanthom »

Доброго времени суток. Я здесь новичёк. Может не в тот топик пишу. Просьба админов переместить куда надо.

У меня 2 небольших проблемы с дистрибом.

1. Не всегда переключаются раскладки клавиатуры как надо. Т.е. в некоторых приложениях переключаются нормально в некоторых вообще отказываются переключаться. В чём ошибка может быть, если не трудно ключиком или батником. (пс пунто свичер стоит и нормально робит, но я ставлю систему таким людям, которые даже не знают что это такое)

2. Не устанавливаются по дэфолту ип-адреса и проч. сетевые настройки. Устанавливается только воркгруппа.



И пара небольших вопросиков на засыпку - ни укого случайно ключиков нету к компасу 8(или хотя бы 7+), алкоголю (выскакивает сообщение о необходимости установки дров на рэйд) и ноду (как к нему обновления можно прикрутить сразуже).

Как очистить автозагрузку из папки all users?



PS РунОнс файл файл ответов и файл с твиками прилагаются - просто убрать расширение txt
Аватара пользователя
amel27

Re: Маленькие хитрости автоустановки

Сообщение amel27 »

Чтение структуры подкаталогов для создания значения ключа 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\ заменяем на ничего (не смог я поиск регулярных выражений корректно написать).

Внимание: программа тупая она не понимает сколько символов в названии каталога, так что проверяйте это сами.
Аватара пользователя
jimmyboy

Re: Маленькие хитрости автоустановки

Сообщение jimmyboy »

чета никак не разберусь как этот батник работает

инфы в инете про пакетные файлы мало нашел

может кто распишет как эта фиговина работает? Изображение

потом попробую переделать ее чтоб винты форматировала Изображение
Аватара пользователя
orphan

Re: Маленькие хитрости автоустановки

Сообщение orphan »

Кто-нибудь может выложить утилитку CDEject.exe? В этой теме аттач битый, а в инете натыкался только на шараварные подобные проги.
Ответить

Вернуться в «Автоматическая установка Windows 2000/XP/2003»