Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: =======================================================
:: Файлы можно скачать здесь:
:: http://download.virtualbox.org/virtualbox/vboxdownload.html#windows
:: =======================================================
:: Размер словаря (МБ), измените, если у Вас недостаточно оперативной памяти
:: Set dictUser=32
:: Установить 1 для удаления языков и документации
Set lite=1
:: Установить 1 для принудительной упаковки консольным архиватором (при проблемах с упаковкой)
Set consol=1
:: =======================================================
Title Создание аддона Virtual Box
If "%Time:~0,1%"==" " (Set tt=0%Time:~1,1%-%Time:~3,2%) Else Set tt=%Time:~0,2%-%Time:~3,2%
Echo Запущено %Date% в %tt%
Echo Подготовка ... 
Call :Sec strt1

Call :_DelTemp
Del /Q Virtu*.* 1>Nul 2>&1
MD Temp 1>Nul 2>&1

Set xOS=x86& If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
If "%xOS%"=="x86" Set ProgramW6432=%ProgramFiles%& Set ProgramFiles(x86)=%ProgramFiles%
:: =======================================================
:: Путь к установленному архиватору 7-Zip без слеша в конце. Если у Вас путь нестандартный, то впишите АБСОЛЮТНЫЙ путь.
Set path7Zip=%ProgramW6432%\7-Zip
rem Echo %path7Zip%
:: =======================================================
Call :_TestSys

For %%i In ("download\*.exe") Do Set nameExe=%%~nxi
If Not Defined nameExe Call :_Abort "Отсутствует дистрибутив VirtualBox (.exe файл)."
For /F "tokens=2,3 delims=-" %%i In ("%nameExe%") Do (
	Set verexe=%%i
	Set Build=%%j
	Set nVer=%%i-r%%j
)
Set VerC=%verexe:.=,%,0
Copy bin\7zsd_LZMA2.sfx Temp\7zsd_LZMA2.sfx>Nul
For /F "tokens=* delims=" %%i In (bin\ver.rc) Do (
	Set ti=%%i
	Set ti=!ti:02.12.2010=%Date%!
	Set ti=!ti:1,18,6,1444=%VerC%!
	Set ti=!ti:3.2.12=%verexe%!
	Set ti=!ti:68302=%Build%!
	Echo !ti! >>Temp\ver.rc
)
bin\Rc.exe /r /fo Temp\ver.res Temp\ver.rc>Nul
bin\ResHacker.exe -addoverwrite Temp\7zsd_LZMA2.sfx, Temp\7zsd_LZMA2.sfx, Temp\ver.res,,,
bin\ResHacker.exe  -addoverwrite Temp\7zsd_LZMA2.sfx, Temp\7zsd_LZMA2.sfx, bin\101.ico, Icon, 101,
Del bin\ResHacker.ini bin\ResHacker.log >nul

Set FullName=VirtualBox_%verexe%_x86_x64
MD Temp\%FullName%\Files\ForceCopy\SVCPACK 1>Nul 2>&1
Echo Распаковка %nameExe% ...
Set pmsi=%cd%\Temp
PushD Temp
	..\download\%nameExe% -x -s -p "%pmsi%"
	For %%i In (*.msi) Do (
		Set tn=%%~ni
		Set x!tn:~-2!=%%~ni
	)
	Echo Создание админ. точки из %x86% ...
	msiexec /a "%pmsi%\%x86%.msi" /qn TARGETDIR="%pmsi%\%x86%"
	If Not %ErrorLevel%==0 PopD & Call :_Abort "Ошибка %ErrorLevel% создания админ. точки (x86). Повторите."
	Echo Создание админ. точки из %x64% ...
	msiexec /a "%pmsi%\%x64%.msi" /qn TARGETDIR="%pmsi%\%x64%"
	If Not %ErrorLevel%==0 PopD & Call :_Abort "Ошибка %ErrorLevel% создания админ. точки (x64). Повторите."
	If %lite%==1 (
		Echo Удаление мусора из админ. точек ...
		For %%i In ("%x86%\PFiles\Oracle VM VirtualBox\nls\*.qm") Do (
			Set ti=%%~ni
			If /I Not !ti:~-2!==ru If /I Not !ti:~-2!==en CD. >%%i
		)
		CD. >"%x86%\PFiles\Oracle VM VirtualBox\doc\UserManual.pdf"
		CD. >"%x86%\PFiles\Oracle VM VirtualBox\VirtualBox.chm"
		For %%i In ("%x64%\PFiles\Oracle VM VirtualBox\nls\*.qm") Do (
			Set ti=%%~ni
			If /I Not !ti:~-2!==ru If /I Not !ti:~-2!==en CD. >%%i
		)
		CD. >"%x64%\PFiles\Oracle VM VirtualBox\doc\UserManual.pdf"
		CD. >"%x64%\PFiles\Oracle VM VirtualBox\VirtualBox.chm"
	)
	Call :_sizedir "%x86%"
	Set /A All += dirsize
	Call :_sizedir "%x64%"
	Set /A All += dirsize, AllMB = All/1024/1024
	Echo Дост. словарь	- !AllMB! МБ	(исходя из размера данных !All!)

	Echo Упаковка админ. точек в архив ...
	Call :compr "Упаковка админ. точек в архив" "2in1.7z %x86% %x64%"
	Echo Упаковка архива админ. точек и автономного архиватора в архив ...
	Set tcomline=%comline%
	Set comline=-mx0
	Call :compr "Упаковка архива админ. точек и автономного архиватора" "VirtuBox.7z 2in1.7z ..\bin\7zr.exe ..\bin\PrivateHash.exe"
	Set comline=%tcomline%
	Echo Создание SFX
	Copy ..\bin\VirtualBox_config.txt >Nul
	(Echo SetEnvironment="Vers= v%verexe%"
	Echo SetEnvironment="nVer=%nVer%"
	Echo ;^^!@InstallEnd@^^!)>>VirtualBox_config.txt

	Copy /b ..\Temp\7zsd_LZMA2.sfx + VirtualBox_config.txt + VirtuBox.7z ..\VirtuBox.exe>Nul
	Copy ..\VirtuBox.exe %FullName%\Files\ForceCopy\SVCPACK\ >Nul

	Echo VirtuBox.exe -ai -gm2 -fm0>%FullName%\Run
	
	(Echo └ффюэ VirtualBox v%verexe% [x86/x64]
	Echo.
	Echo ╤юфхЁцшЄ фтх тхЁёшш ^(x86 ш x64^). ╧Ёш єёЄрэютъх ЁрчЁ*фэюёЄ№ ёшёЄхь√ юяЁхфхы*хЄё* 
	Echo ртЄюьрЄшўхёъш ш єёЄрэртыштрхЄё* ёююЄтхЄёЄтє■∙р* тхЁёш* тшЁЄєры№эющ ьр°шэ√.
	Echo.
	Echo VirtualBox - тшЁЄєры№эр* ьр°шэр.
	Echo.
	Echo ╤рщЄ яЁюуЁрьь√: http://www.virtualbox.org/
	Echo ┬хЄър рффюэр: http://forum.oszone.net/post-1436397.html#post1436397
	Echo.
	Echo ╠хёЄю єёЄрэютъш: %%PROGRAMFILES%%\Oracle\VirtualBox\
	Echo ╤яюёюс єёЄрэютъш: SVCPACK, ьюцхЄ шёяюы№чютрЄ№ё* ш фы* єёЄрэютъш эр "цштє■" ёшёЄхьє.
	Echo ▀Ёы√ъш ёючфр■Єё*: т ьхэ■ ╧єёъ-^>╧ЁюуЁрьь√, эр Ёрсюўхь ёЄюых, эр ярэхыш с√ёЄЁюую чряєёър.
	Echo ╧ЁхфєёьюЄЁхэр тючьюцэюёЄ№ єфрыхэш* яЁюуЁрьь√ ўхЁхч ряяыхЄ "╙ёЄрэютър ш єфрыхэшх яЁюуЁрьь".
	Echo.
	Echo └ффюэ яЁхфэрчэрўхэ фы* шёяюы№чютрэш* ё яръхЄюь юсэютыхэшщ UpdatePack-XPSP3-Rus
	Echo.
	Echo ^(c^) gora, %Date%)>%FullName%\addon.nfo

	Echo Упаковка аддона в архив ...
	Call :compr "Упаковка аддона в архив" "..\%FullName%.7z %FullName%"

PopD

Call :_control "%FullName%.7z" "2in1.7z"
Call :Sec strt2
Set /a tmake=strt2-strt1
Echo.
Echo Аддон создан и упакован за %tmake%с ^^!
Echo Размер %size% МБ (со словарем %rdict1% МБ)
Echo.
Echo Для удаления временных файлов и выхода нажмите любую клавишу.
Echo.
Pause >Nul
Call :_DelTemp
Exit

:compr

If "%consol%"=="1"	(
	Start /min /wait "%~1" "%path7Zip%\7z.exe" a -r %~2 %comline%
) Else (
	Start /min /wait "" "%path7Zip%\7zG.exe" a -r %~2 %comline%
)
Set ErL=%ErrorLevel%
If %ErL%==0 GoTo :EOF
If %ErL%==2 Set Err=Фатальная ошибка.
If %ErL%==8 Set Err=Недостаточно памяти для операции.
If %ErL%==255 Set Err=Пользователь остановил процесс.
PopD
Call :_Abort "Ошибка упаковки %ErL%. %Err%"
GoTo :EOF

:_control

Set /A size=%~z1*10/1024*10/1024
Set size=%size:~0,-2%.%size:~-2%

For /F "tokens=1-5 usebackq delims==: " %%i In (`"%path7Zip%\7z.exe" l -slt Temp\%~2`) Do If "%%i"=="Method" If Not "%%l"=="" Set rdict=%%l
If "%rdict:~-1%"=="m" (
	Set rdict1=%rdict:~,-1%
	GoTo :EOF
)
Set /A rdict-=21
Set rdict1=2
For /L %%i In (1,1,%rdict%) Do Set /A rdict1*=2
GoTo :EOF

:_Abort

COLOR 0C
Echo %~1 Создание аддона прервано^^!
Pause >Nul
Call :_DelTemp
Exit

:_TestSys

If Not Exist "%path7Zip%\7zG.exe" Call :_Abort "Неверный путь к архиватору 7-Zip."
For /F "tokens=1-4 usebackq" %%i In (`"%path7Zip%\7z.exe"`) Do (
 	If "%%i"=="7-Zip" (
 		If "%%j"=="[64]" (
			Set arch64=%%j
			Set Ver=%%k
			If "%%l"=="beta" Set Beta=%%l
			If "%%l"=="alpha" Set Beta=%%l
		) Else (
			Set Ver=%%j
			If "%%k"=="beta" Set Beta=%%k
			If "%%k"=="alpha" Set Beta=%%k
		)
	)
)
If %Ver% LSS 9.04 Call :_Abort "Старая версия архиватора 7-Zip. Обновите."
For /F "Tokens=1,2 Skip=1" %%i In ('WMIC OS Get FreePhysicalMemory^, TotalVisibleMemorySize') Do (
	Set /A Fram=%%i/1024, Aram=%%j/1024
	GoTo :_End
)
:_End

Set /a dictM=(%Fram%-4)*10/115
For %%a In (16 24 32 48 64 96 128 192 256 384 512 768 1024) Do If %%a LEQ %dictM% Set dict=%%a
Call :_Limit
Echo.
Echo Разрядность ОС	- %xOS%
Echo Версия 7-Zip	- %Ver% %Beta% %arch64%
Echo RAM всего	- %Aram% МБ
Echo RAM свободно	- %Fram% МБ 	(без учета фрагментации)
Echo Макс. словарь	- %dictM% МБ 	(исходя из свободных %Fram% МБ)
Echo Реком. словарь	- %dict% МБ 	(исходя из макс. словаря %dictM% МБ%limit%)
If Defined dictUser (
	If Defined limit2 (
		Echo Польз. словарь	- %dictUser% МБ	^(будет использован %Sdict% МБ%limit2%^)
	) Else (
		Echo Польз. словарь	- %dictUser% МБ
		Set Sdict=%dictUser%
	)
) Else (
	Echo Польз. словарь	- не задан	^(будет использован рекомендованный %dict% МБ^)
	Set Sdict=%dict%
)
Echo.
Set comline=-mmt2 -m0=BCJ2 -m1=LZMA2:d%Sdict%m:fb273 -m2=LZMA2:d21:fb273 -m3=LZMA2:d21:fb273 -mb0:1 -mb0s1:2 -mb0s2:3
GoTo :EOF

:_Limit

If %xOS%==x64 GoTo :EOF
If %dict% GTR 128 Set limit= [предел x86]& Set dict=128
If Not Defined dictUser GoTo :EOF
If %dictUser% GTR 128 Set limit2= [предел x86]& Set Sdict=128
GoTo :EOF

:_DelTemp

RD /s /q Temp 1>Nul 2>&1
If Not Exist Temp GoTo :EOF
Ping -n 2 localhost>Nul
GoTo :_DelTemp

:Sec

Set tm=%time%
Set /a %1=3600*%tm:~0,2%+60*1%tm:~3,2%+1%tm:~6,2%
GoTo :EOF

:_sizedir

For /F "tokens=1-3" %%a In ('Dir %1 /-C /S /A:-D') Do (
	If !flag!==1 Set dirsize=%%c
	If "%%b"=="файлов:" (Set flag=1) Else Set flag=0
)
GoTo :EOF

Отправлено: 07:44, 14-05-2011 | #3