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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Тест-форум (http://forum.oszone.net/forumdisplay.php?f=26)
-   -   Тестирование утилиты для подсветки батников (http://forum.oszone.net/showthread.php?t=206809)

gora 13-05-2011 16:47 1675722

Тестирование утилиты для подсветки батников
 
Вложений: 1
Утилита от AZJIO размещена здесь.
Можете потестировать и выложить батники с проблемной подсветкой в этой ветке.
Код:

@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


gora 13-05-2011 19:48 1675821

Код:

@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


gora 14-05-2011 07:44 1676064

Код:

@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


gora 15-05-2011 07:16 1676567

Код:

@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 [color=#0000FF]Echo[/color] %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


gora 15-05-2011 21:50 1676914

Код:

@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
download\%nameExe% -x -s -p "%pmsi%"
For %%i In (Temp\*.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 Call :_Abort "Ошибка %ErrorLevel% создания админ. точки (x86). Повторите."
Echo Создание админ. точки из %x64% ...
msiexec /a "%pmsi%\%x64%.msi" /qn TARGETDIR="%pmsi%\%x64%"
If Not %ErrorLevel%==0 Call :_Abort "Ошибка %ErrorLevel% создания админ. точки (x64). Повторите."
PushD Temp
        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! >..\suff_size.txt

        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%с. Размер %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
Ver
Echo Разрядность ОС        - %xOS%
Echo Версия 7-Zip        - %Ver% %Beta% %arch64%
Echo RAM всего        - %Aram% МБ
Echo RAM свободно        - %Fram% МБ        (без учета фрагментации)
Echo Макс. словарь        - %dictM% МБ        (исходя из свободных %Fram% МБ)
Echo Реком. словарь        - %dict% МБ        (исходя из макс. словаря %dictM% МБ%limit%)
If Exist suff_size.txt For /F "tokens=1-2" %%i In (suff_size.txt) Do Echo Достат. словарь        - %%i МБ        ^(исходя из размера данных %%j^)
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


gora 16-05-2011 09:51 1677136

Код:

@Echo Off
Title USB Manager
SetLocal EnableDelayedExpansion
Set err=0
Set cnt=0
Set choice=1
For /F "tokens=* delims=" %%a In ('usr list -s') Do Call :_parser "%%a"
If %cnt%==0 Exit
If %cnt%==1 GoTo :_OneDrv
Set choice=
Set disconnect=0
Set connect=0
Set buttons="Стоп все" "Вкл. все" "Отмена"
Set Mesg1=[Стоп все] - остановить все устройства~n[Вкл. все]~t  - вернуть все устройства обратно~n~n
For /L %%i In (1,1,%cnt%) Do (
        If "!status_drv%%i!"=="" (
                Set connect=1
                Set Mesg1=!Mesg1![Стоп !drv%%i!]~t  - остановить устройство !drv%%i!~n
                Set buttons=!buttons! "Стоп !drv%%i!"

        ) Else (
                Set disconnect=1
                Set Mesg1=!Mesg1![Вкл. !drv%%i!]~t  - вернуть устройство !drv%%i! обратно *~n
                Set buttons=!buttons! "Вкл. !drv%%i!"
        )
)
If %connect%==1 (
rem Set Mesg1=!Mesg1!~n[Откл. все] - остановить все устройства
rem Set buttons=!buttons!"Откл. все"
)
If %disconnect%==1 (
        Set Mesg1=!Mesg1!~n* Это действие также перезагрузит другие~n  устройства, подключенные к USB хабу
rem        Set Mesg1=!Mesg1!~n[Вкл. все] - вернуть все устройства обратно~n* Это действие также перезагрузит другие~n  устройства, подключенные к USB хабу
rem Set buttons=!buttons!"Вкл. все"
)

7zbut -msgbox "!Mesg1!" "USB Manager" db1:fl33:bw85:bpl3 !buttons!>nul
Set presskey=!errorlevel!
If !presskey!==20 Exit
If !presskey!==1 (
        Set cntRet=0
        For /L %%i In (1,1,%cnt%) Do If "!status_drv%%i!"=="" (
                Set /A cntRet +=1
                Set drvc=!drv%%i!
                Set listdrv=!listdrv!~n!fulldrv%%i!
                Call :_Stop !drv%%i!
        )
        If !cntRet!==1 (
                Call :_balloon "Устройство !drvc! остановлено"
        ) Else Call :_balloon "Остановлены устройства:!listdrv!"
        Exit
)
If !presskey!==2 (
        Set cntRet=0
        For /L %%i In (1,1,%cnt%) Do If Not "!status_drv%%i!"=="" (
                Set /A cntRet +=1
                Set drvc=!drv%%i!
                Set listdrv=!listdrv!~n!fulldrv%%i!
                Call :_Return !drv%%i!
        )
        If !cntRet!==1 (
                Call :_balloon "Устройство !drvc! возвращено обратно"
        ) Else Call :_balloon "Возвращены обратно устройства:!listdrv!"
        Exit
)
If !presskey! GTR 20 Set /A choice=presskey - 20
:_OneDrv
If "!status_drv%choice%!"=="" (
        Call :_Stop !drv%choice%!
        Call :_balloon "Устройство !drv%choice%! остановлено"
) Else (
        Call :_Return !drv%choice%!
        Call :_balloon "Устройство !drv%choice%! возвращено обратно"
)
Exit

:_Return
usr return -d %~1 >Nul
GoTo :EOF

:_Stop
usr stop -d %1 >Nul
Set err=%errorlevel%
If %err%==0 GoTo :EOF
If %err%==2 (
        usr wholocks -d %1>Nul
        Set err=!errorlevel!
        If !err!==5 GoTo :_message
        If !err!==6 GoTo :_message

        Set Mesg1=Устройство ~x28%1~x29 заблокировано и не может быть остановлено.~n~nФайл блокирующего процесса~n======================
        Set cntPr=0
        For /F "skip=4 tokens=1*" %%a In ('usr wholocks -d %1') Do Call :_lockproc "%%a" "%%b"
        If "!cntPr!"=="1" (
                Set Mesg1=!Mesg1!~n~n1. Остановить процесс ~q!proc!~q и повторить операцию~n2. ~qУбить~q процесс ~q!proc!~q и повторить операцию
        ) Else (
                Set Mesg1=!Mesg1!~n~n1. Остановить ВСЕ блокирующие процессы и повторить операцию~n2. ~qУбить~q ВСЕ блокирующие процессы и повторить операцию
        )
        7zbut -msgbox "!Mesg1!" "USB Manager" db1:fl49 "1 вариант" "2 вариант" "Отмена">nul
        Set presskey=!errorlevel!
        If !presskey!==20 Exit
        If !presskey!==1 usr forcedstop -d %1 >Nul
        If !presskey!==2 For /L %%i In (1,1,!cntPr!) Do TaskKill /F /IM !proc%%i!>Nul
        GoTo :_Stop
)
:_message
If %err%==1 Set Mesg=Устройство %1 не найдено
If %err%==3 Set Mesg=Неверный синтаксис команды
If %err%==4 Set Mesg=Неизвестная команда
If %err%==5 Set Mesg=Не найдены процессы блокирующие устройство %1 или оно уже свободно
If %err%==6 Set Mesg=Произошла ошибка при поиске процессов блокирующих устройство %1
Call :_balloon "%Mesg%"
GoTo :EOF

:_lockproc
Set /A cntPr +=1
rem Set tab=
Set proc=%~1
Set proc!cntPr!=%~1
rem If "!proc:~7,1!"=="" Set tab=~t       
Set Mesg1=!Mesg1!~n%~2
GoTo :EOF

:_parser
Set /A cnt +=1
Set ta=%~1
Set fulldrv%cnt%=!ta:~3!
If Not "!ta!"=="!ta:safely removed=!" (
        Set status_drv%cnt%=1
        Set fulldrv%cnt%=!ta:~3,-20!
)
Set ta=!ta:*^(=!
Set drv%cnt%=!ta:~0,2!
GoTo :EOF

:_balloon
Start "" nircmd trayballoon "USB Manager" %1 "Zentimo.exe" 5000
Echo 
GoTo :EOF


gora 26-05-2011 19:38 1683235

Код:

@Echo Off
:: Кодировка файла 'Кирилица DOS' (866)
Set var=123456789
Echo                                        Запись                Значение
Echo.
Echo Переменная полностью                        %%var%%                %var%
Echo Первые три символа                        %%var:~0,3%%        %var:~0,3%
Echo Последние три символа                        %%var:~-3%%        %var:~-3%
Echo Три символа начиная с шестого                %%var:~5,3%%        %var:~5,3%
Echo Без первых трех символов                %%var:~3%%        %var:~3%
Echo Без последних трех символов                %%var:~0,-3%%        %var:~0,-3%
Echo Без первых двух и последних трех        %%var:~2,-3%%        %var:~2,-3%
Echo.
Echo Замена части переменной (45 на abc)        %%var:45=abc%%        %var:45=abc%
Echo Замена части переменной и символов
Echo до нее (23, и все что до этого, на xyz)        %%var:*23=xyz%%        %var:*23=xyz%
Echo Удаление части переменной (567)                %%var:567=%%        %var:567=%
Echo.
Echo ===============================================================================
Echo Запись        Значение
Echo.
Echo %%0        %0
Echo %%~0        %~0
Echo %%~f0        %~f0
Echo %%~s0        %~s0
Echo %%~d0        %~d0
Echo %%~p0        %~p0
Echo %%~n0        %~n0
Echo %%~x0        %~x0
Echo %%~a0        %~a0
Echo %%~t0        %~t0
Echo %%~z0        %~z0
Echo %%~dp0        %~dp0
Echo %%~nx0        %~nx0
Echo %%~sn0        %~sn0
Echo %%~sx0        %~sx0
Echo %%~snx0        %~snx0
Echo %%~ftza0        %~ftza0
Pause>Nul


gora 27-05-2011 16:30 1683747

Код:

@Echo Off
:: Кодировка файла 'Кирилица DOS' (866)
Set var=123456789
Echo                                        Запись                Значение
Echo.
Echo Переменная полностью                        %%var%%                %var%
Echo Первые три символа                        %%var:~0,3%%        %var:~0,3%
Echo Последние три символа                        %%var:~-3%%        %var:~-3%
Echo Три символа начиная с шестого                %%var:~5,3%%        %var:~5,3%
Echo Без первых трех символов                %%var:~3%%        %var:~3%
Echo Без последних трех символов                %%var:~0,-3%%        %var:~0,-3%
Echo Без первых двух и последних трех        %%var:~2,-3%%        %var:~2,-3%
Echo.
Echo Замена части переменной (45 на abc)        %%var:45=abc%%        %var:45=abc%
Echo Замена части переменной и символов
Echo до нее (23, и все что до этого, на xyz)        %%var:*23=xyz%%        %var:*23=xyz%
Echo Удаление части переменной (567)                %%var:567=%%        %var:567=%
Echo.
Echo ===============================================================================
Echo Запись        Значение
Echo.
Echo %%0        %0
Echo %%~0        %~0
Echo %%~f0        %~f0
Echo %%~s0        %~s0
Echo %%~d0        %~d0
Echo %%~p0        %~p0
Echo %%~n0        %~n0
Echo %%~x0        %~x0
Echo %%~a0        %~a0
Echo %%~t0        %~t0
Echo %%~z0        %~z0
Echo %%~dp0        %~dp0
Echo %%~nx0        %~nx0
Echo %%~sn0        %~sn0
Echo %%~sx0        %~sx0
Echo %%~snx0        %~snx0
Echo %%~ftza0        %~ftza0
Pause>Nul


gora 30-05-2011 22:02 1685326

Код:

@Echo Off
Setlocal enabledelayedexpansion
Rem Путь к папке со скриншотами
Set "input_dir=c:\musor\input"
Rem Размер превьюшек
Set "maxsize=200,200"
Rem Число превьюшек в ряду
Set nummax=4
Rem Путь к папке со скриншотами на FTP (слеши прямые)
Set "ftp=http://tools.oszone.net/Jekson07/pict"
Rem Путь к папке с программой IrfanView
Set "Irfan=%ProgramFiles%\IrfanView\i_view32.exe"

If Exist "%input_dir%\links.txt" Del /f /q "%input_dir%\links.txt"
For /R "%input_dir%" %%i In (*) Do (
        Set tmp_name=%%~ni
        If Not "!tmp_name:~-3!"=="_rz" If Not %%~xi==.txt (
                "%Irfan%" "%%i" /resize=^(%maxsize%^) /resample /aspectratio /convert="%input_dir%\%%~ni_rz%%~xi"
                Set "urls=!urls![url=%ftp%/%%~nxi][img]%ftp%/%%~ni_rz%%~xi[/img][/url]"
                Set /a num+=1
                If !num! GEQ %nummax% (
                        Echo !urls!>>"%input_dir%\links.txt"
                        Set num=0
                        Set urls=
                )
        )
)
If Not !num!==0 Echo !urls!>>"%input_dir%\links.txt"
Exit


gora 31-05-2011 09:44 1685510

Код:

@Echo Off
Title USB Manager
SetLocal EnableDelayedExpansion
Set err=0
Set cnt=0
Set choice=1
For /F "tokens=* delims=" %%a In ('usr list -s') Do Call :_parser "%%a"
If %cnt%==0 Exit
If %cnt%==1 GoTo :_OneDrv
Set choice=
Set disconnect=0
Set connect=0
Set buttons="Стоп все" "Вкл. все" "Отмена"
Set Mesg1=[Стоп все] - остановить все устройства~n[Вкл. все]~t  - вернуть все устройства обратно~n~n
For /L %%i In (1,1,%cnt%) Do (
        If "!status_drv%%i!"=="" (
                Set connect=1
                Set Mesg1=!Mesg1![Стоп !drv%%i!]~t  - остановить устройство !drv%%i!~n
                Set buttons=!buttons! "Стоп !drv%%i!"

        ) Else (
                Set disconnect=1
                Set Mesg1=!Mesg1![Вкл. !drv%%i!]~t  - вернуть устройство !drv%%i! обратно *~n
                Set buttons=!buttons! "Вкл. !drv%%i!"
        )
)
If %connect%==1 (
rem Set Mesg1=!Mesg1!~n[Откл. все] - остановить все устройства
rem Set buttons=!buttons!"Откл. все"
)
If %disconnect%==1 (
        Set Mesg1=!Mesg1!~n* Это действие также перезагрузит другие~n  устройства, подключенные к USB хабу
rem        Set Mesg1=!Mesg1!~n[Вкл. все] - вернуть все устройства обратно~n* Это действие также перезагрузит другие~n  устройства, подключенные к USB хабу
rem Set buttons=!buttons!"Вкл. все"
)

7zbut -msgbox "!Mesg1!" "USB Manager" db1:fl33:bw85:bpl3 !buttons!>nul
Set presskey=!errorlevel!
If !presskey!==20 Exit
If !presskey!==1 (
        Set cntRet=0
        For /L %%i In (1,1,%cnt%) Do If "!status_drv%%i!"=="" (
                Set /A cntRet +=1
                Set drvc=!drv%%i!
                Set listdrv=!listdrv!~n!fulldrv%%i!
                Call :_Stop !drv%%i!
        )
        If !cntRet!==1 (
                Call :_balloon "Устройство !drvc! остановлено"
        ) Else Call :_balloon "Остановлены устройства:!listdrv!"
        Exit
)
If !presskey!==2 (
        Set cntRet=0
        For /L %%i In (1,1,%cnt%) Do If Not "!status_drv%%i!"=="" (
                Set /A cntRet +=1
                Set drvc=!drv%%i!
                Set listdrv=!listdrv!~n!fulldrv%%i!
                Call :_Return !drv%%i!
        )
        If !cntRet!==1 (
                Call :_balloon "Устройство !drvc! возвращено обратно"
        ) Else Call :_balloon "Возвращены обратно устройства:!listdrv!"
        Exit
)
If !presskey! GTR 20 Set /A choice=presskey - 20
:_OneDrv
If "!status_drv%choice%!"=="" (
        Call :_Stop !drv%choice%!
        Call :_balloon "Устройство !drv%choice%! остановлено"
) Else (
        Call :_Return !drv%choice%!
        Call :_balloon "Устройство !drv%choice%! возвращено обратно"
)
Exit

:_Return
usr return -d %~1 >Nul
GoTo :EOF

:_Stop
usr stop -d %1 >Nul
Set err=%errorlevel%
If %err%==0 GoTo :EOF
If %err%==2 (
        usr wholocks -d %1>Nul
        Set err=!errorlevel!
        If !err!==5 GoTo :_message
        If !err!==6 GoTo :_message

        Set Mesg1=Устройство ~x28%1~x29 заблокировано и не может быть остановлено.~n~nФайл блокирующего процесса~n======================
        Set cntPr=0
        For /F "skip=4 tokens=1*" %%a In ('usr wholocks -d %1') Do Call :_lockproc "%%a" "%%b"
        If "!cntPr!"=="1" (
                Set Mesg1=!Mesg1!~n~n1. Остановить процесс ~q!proc!~q и повторить операцию~n2. ~qУбить~q процесс ~q!proc!~q и повторить операцию
        ) Else (
                Set Mesg1=!Mesg1!~n~n1. Остановить ВСЕ блокирующие процессы и повторить операцию~n2. ~qУбить~q ВСЕ блокирующие процессы и повторить операцию
        )
        7zbut -msgbox "!Mesg1!" "USB Manager" db1:fl49 "1 вариант" "2 вариант" "Отмена">nul
        Set presskey=!errorlevel!
        If !presskey!==20 Exit
        If !presskey!==1 usr forcedstop -d %1 >Nul
        If !presskey!==2 For /L %%i In (1,1,!cntPr!) Do TaskKill /F /IM !proc%%i!>Nul
        GoTo :_Stop
)
:_message
If %err%==1 Set Mesg=Устройство %1 не найдено
If %err%==3 Set Mesg=Неверный синтаксис команды
If %err%==4 Set Mesg=Неизвестная команда
If %err%==5 Set Mesg=Не найдены процессы блокирующие устройство %1 или оно уже свободно
If %err%==6 Set Mesg=Произошла ошибка при поиске процессов блокирующих устройство %1
Call :_balloon "%Mesg%"
GoTo :EOF

:_lockproc
Set /A cntPr +=1
rem Set tab=
Set proc=%~1
Set proc!cntPr!=%~1
rem If "!proc:~7,1!"=="" Set tab=~t       
Set Mesg1=!Mesg1!~n%~2
GoTo :EOF

:_parser
Set /A cnt +=1
Set ta=%~1
Set fulldrv%cnt%=!ta:~3!
If Not "!ta!"=="!ta:safely removed=!" (
        Set status_drv%cnt%=1
        Set fulldrv%cnt%=!ta:~3,-20!
)
Set ta=!ta:*^(=!
Set drv%cnt%=!ta:~0,2!
GoTo :EOF

:_balloon
Start "" nircmd trayballoon "USB Manager" %1 "Zentimo.exe" 5000
Echo 
GoTo :EOF


gora 05-06-2011 10:33 1688658

Код:

@Echo Off
rem ChCp 1251>Nul
SetLocal EnableDelayedExpansion
Set _=%Date%
Set 1var=%Date%
Set a=%Date%
Echo %%_%%=        %_%
Echo %%a%%=        %a%
Echo %%1var%%=        %1var%
Pause
Exit


gora 05-06-2011 11:44 1688684

Код:

@Echo Off
SETLOCAL enabledelayedexpansion
Set SrcDir1=e:\Temp\SPB\scan
Set Arhive1=e:\Temp\SPB\arhive
Set SrcDir2=e:\Temp\MSK\scan
Set Arhive2=e:\Temp\MSK\arhive
Set FS=%CD%
For /L %%i In (1,1,2) Do (
        RD "!SrcDir%%i!" 2>Nul
        If Exist "!SrcDir%%i!" (
                7z a "!Arhive%%i!\%Date:~6,4%%Date:~3,2%%Date:~0,2%.zip" "!SrcDir%%i!\*">Nul
                cd /d "!SrcDir%%i!"
                RD /S /Q "!SrcDir%%i!" 2>Nul
                cd /d "%FS%"
        ) Else MD "!SrcDir%%i!" 2>Nul
)
Pause


gora 07-06-2011 19:54 1690194

Код:

@echo off
Set "STR1=TEST_0123_test_4567"
Set "STR2=test_0123_TEST_4567"

Call:EncodeString 4 STR1
Call:EncodeString 4 STR2

Pause>Nul
EXIT

:EncodeString  %KeyLength_By2%  %VarString%  [%VarKey%]
::------------------------------------------------------
 SetLocal EnableDelayedExpansion
(For /L %%i In (32,1,126) Do (Set/A "$n=%%i+13-(%%i-32)/82*95"
  %COMSPEC% /C "Exit !$n!"& Set "$n=!=ExitCode:~-2!"
  %COMSPEC% /C "Exit %%i" & Set "$_!=ExitCodeASCII!=!$n!")
 Set "tmp=!%~2!!%~2!FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100"
 Set/A "LN=0x!tmp:~510,2!,IN=LN/%~1+1"& Set "NEWSTR="
 For /L %%m In (1,1,%~1) Do (Set/A XOR=0
  For /L %%n In (1,1,!IN!) Do (Set/A "LI=%%m-1+(%%n-1)*%~1"
    Call Set "CHR=%%%~2:~!LI!,1%%"& Set "ASC="
    If Defined CHR Call Set "ASC=0x%%$_!CHR!%%"
    Set/A "XOR=XOR^ASC")
  %COMSPEC% /C "Exit !XOR!"& Set "NEWSTR=!NEWSTR!!=ExitCode:~-2!")
)
 EndLocal& If "%~3"=="" (Echo:%NEWSTR%) Else Set "%~3=%NEWSTR%"
GoTo:EOF


gora 08-06-2011 11:47 1690539

Код:

@echo off
Set "STR1=TEST_0123_test_4567"
Set "STR2=test_0123_TEST_4567"

Call:EncodeString 4 STR1
Call:EncodeString 4 STR2

Pause>Nul
EXIT

:EncodeString  %KeyLength_By2%  %VarString%  [%VarKey%]
::------------------------------------------------------
 SetLocal EnableDelayedExpansion
(For /L %%i In (32,1,126) Do (Set/A "$n=%%i+13-(%%i-32)/82*95"
  %COMSPEC% /C "Exit !$n!"& Set "$n=!=ExitCode:~-2!"
  %COMSPEC% /C "Exit %%i" & Set "$_!=ExitCodeASCII!=!$n!")
 Set "tmp=!%~2!!%~2!FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100"
 Set/A "LN=0x!tmp:~510,2!,IN=LN/%~1+1"& Set "NEWSTR="
 For /L %%m In (1,1,%~1) Do (Set/A XOR=0
  For /L %%n In (1,1,!IN!) Do (Set/A "LI=%%m-1+(%%n-1)*%~1"
    Call Set "CHR=%%%~2:~!LI!,1%%"& Set "ASC="
    If Defined CHR Call Set "ASC=0x%%$_!CHR!%%"
    Set/A "XOR=XOR^ASC")
  %COMSPEC% /C "Exit !XOR!"& Set "NEWSTR=!NEWSTR!!=ExitCode:~-2!")
)
 EndLocal& If "%~3"=="" (Echo:%NEWSTR%) Else Set "%~3=%NEWSTR%"
GoTo:EOF


gora 08-06-2011 18:38 1690934

Код:

@echo off
setlocal enabledelayedexpansion
echo                %TIME%
FOR /F "tokens=*" %%i IN ('d_t.com') DO %%i
echo 1: %_da%.%_mo%.%_cy%%_yr%        %_hh%:%_mm%:%_ss%%TIME:~-3%
For /F "delims=" %%i IN ('Now.com') DO Set NowTime=%%i
Echo %NowTime%
for /f "tokens=1-6 delims=:. " %%a in ('Now.com') do (set _hh=%%a& set _mm=%%b& set _ss=%%c& set _mo=%%d& set _da=%%e& set _yr=%%f)
set _cy=19& if %_yr% LSS 30 set _cy=20
echo 2: %_da%.%_mo%.%_cy%%_yr%        %_hh%:%_mm%:%_ss%%TIME:~-3%
pause>nul
FOR /F "tokens=*" %%i IN ('d_t.com') DO %%i
echo 1: %_da%.%_mo%.%_cy%%_yr%        %_hh%:%_mm%:%_ss%%TIME:~-3%
for /f "tokens=1-6 delims=:. " %%a in ('Now.com') do (set _hh=%%a& set _mm=%%b& set _ss=%%c& set _mo=%%d& set _da=%%e& set _yr=%%f)
set _cy=19& if %_yr% LSS 30 set _cy=20
echo 2: %_da%.%_mo%.%_cy%%_yr%        %_hh%:%_mm%:%_ss%%TIME:~-3%
FOR /F "tokens=*" %%i IN ('d_t.com') DO %%i
echo 1: %_da%.%_mo%.%_cy%%_yr%        %_hh%:%_mm%:%_ss%%TIME:~-3%
for /f "tokens=1-6 delims=:. " %%a in ('Now.com') do (set _hh=%%a& set _mm=%%b& set _ss=%%c& set _mo=%%d& set _da=%%e& set _yr=%%f)
set _cy=19& if %_yr% LSS 30 set _cy=20
echo 2: %_da%.%_mo%.%_cy%%_yr%        %_hh%:%_mm%:%_ss%%TIME:~-3%
FOR /F "tokens=*" %%i IN ('d_t.com') DO %%i
echo 1: %_da%.%_mo%.%_cy%%_yr%        %_hh%:%_mm%:%_ss%%TIME:~-3%


gora 07-11-2011 20:13 1790540

Код:

@Echo Off


Call :_DelTemp
Del /Q Skype*.* 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
:: =======================================================
Call :_TestSys

For %%i In ("download\*.msi") Do Set nameMsi=%%~nxi
If Defined nameMsi (
        Echo Создание админ. точки из %nameMsi% ...
        msiexec /a "download\%nameMsi%" /qn TARGETDIR="%cd%\Temp"
        If Not !ErrorLevel!==0 Call :_Abort "Ошибка !ErrorLevel! создания админ. точки. Повторите."
) Else (
        For %%i In ("download\*.exe") Do Set nameExe=%%~nxi
        If Not Defined nameExe Call :_Abort "Отсутствует дистрибутив Skype (.msi и\или .exe файл)."
        Echo Распаковка и создание админ. точки из !nameExe! ...
        download\!nameExe! /EXTRACTONLY:"%cd%\Temp"
        If Not !ErrorLevel!==0 Call :_Abort "Ошибка !ErrorLevel! создания админ. точки. Повторите."
        For %%i In ("Temp\*.msi") Do Set nameMsi=%%~nxi
)

PushD Temp
        Echo Подготовка вспомогательных файлов ...
        Set p_exe=%~dp0Temp\Program Files\Skype\Phone\Skype.exe
        WMIC datafile where name='%p_exe:\=\\%' get version>verEXE.txt
        For /F "tokens=1-4 skip=1 delims=." %%i In ('Type verEXE.txt') Do (
                Set Build=%%l
                Set Build=!Build: =!
                Set verexe=%%i.%%j.%%k
                Set mark=%%k
                Set verORIG=%%i,%%j,%%k,!Build!
        )
        If %mark%==%mBE% (Set SFXname=Skype_BE) Else Set SFXname=Skype_SE
        Set FullName=%SFXname%_%verexe%.%Build%

        (Echo.
        Echo 1 VERSIONINFO
        Echo FILEVERSION %verORIG%
        Echo PRODUCTVERSION %verORIG%
        Echo FILEOS 0x40004
        Echo FILETYPE 0x1
        Echo {
        Echo BLOCK "StringFileInfo"
        Echo {
        Echo        BLOCK "000004b0"
        Echo        {
        Echo                VALUE "CompanyName", "Company 'gora-sah'"
        If %mark%==%mBE% (Echo                VALUE "FileDescription", "Skype Business Edition"
        ) Else Echo                VALUE "FileDescription", "Skype"
        Echo                VALUE "FileVersion", "Version of a file %verexe% build %Build%"
        Echo                VALUE "InternalName", ""
        Echo                VALUE "LegalCopyright", "What rights are not present (while?)"
        Echo                VALUE "OriginalFilename", "%SFXname%.exe"
        Echo                VALUE "PrivateBuild", "%DT:~6,2%.%DT:~4,2%.%DT:~0,4%"
        Echo                VALUE "ProductName", "Skype v%verexe%"
        Echo                VALUE "ProductVersion", "Version of a product %verexe%"
        Echo                VALUE "Comments", "Программа общения через интернет"
        Echo                VALUE "LegalTrademarks", "Still is not present"
        Echo                VALUE "SpecialBuild", "Only for users 'oszone.net' ;)"
        Echo        }
        Echo }
        Echo.
        Echo BLOCK "VarFileInfo"
        Echo {
        Echo        VALUE "Translation", 0x0000 0x04B0
        Echo }
        Echo })>ver_866.rc
        Call :_ChCp CP1251 ver_866.rc ver.rc
        ..\bin\Rc.exe /r /fo ver.res ver.rc>Nul
PopD


bin\ResHacker.exe -addoverwrite bin\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, ICONGROUP, 101,
Del bin\ResHacker.ini bin\ResHacker.log >nul

PushD
Temp
        MD %FullName%\Files\ForceCopy\SVCPACK 1>Nul 2>&1
        For %%i In (%nameMsi%) Do Set All=%%~zi
        Call :_sizedir "Program Files"
        Set /A All += dirsize
        Call :_sizedir "Application Data"
        Set /A All += dirsize, AllMB = All/1024/1024
        >..\bin\suff_size.txt Echo !AllMB! !All!
       
        Echo %SFXname%.exe -ai -gm2 -fm0>%FullName%\Run

        (If %mark%==%mBE% (Echo Аддон Skype Business Edition v%verexe% build %Build%
        ) Else Echo Аддон Skype v%verexe% build %Build%
        Echo.
        Echo Skype - программа общения через интернет.
        Echo.
        Echo Сайт программы: http://www.skype.org/
        Echo Ветка аддона: http://forum.oszone.net/thread-205267.html
        Echo.
        Echo Место установки: %%PROGRAMFILES%%\Skype\
        Echo Способ установки: SVCPACK, может использоваться и для установки на "живую" систему.
        Echo Ярлыки создаются: в меню Пуск-^>Программы-^>Skype и на рабочем столе.
        Echo Предусмотрена возможность удаления программы через апплет "Установка и удаление программ".
        Echo.
        Echo По умолчанию Skype добавляется в автозагрузку.
        Echo Для установки с отключенной автозагрузкой измените строку в файле Run так:
        Echo %SFXname%.exe -ai0 -gm2
        Echo.
        Echo Аддон предназначен для использования с пакетом обновлений UpdatePack-XPSP3-Rus
        Echo.
        Echo ^(c^) gora, %DT:~6,2%.%DT:~4,2%.%DT:~0,4%)>addon_866.txt
        Call :_ChCp CP1251 addon_866.txt %FullName%\addon.nfo

        (Echo ;^^!@Install@^^!UTF-8^^!
        If %mark%==%mBE% (Echo SetEnvironment="Name=Skype Business Edition"
        ) Else Echo SetEnvironment="Name=Skype"
        Echo SetEnvironment="Vers= v%verexe%.%Build%"
        Echo SetEnvironment="DelOldVer=hidcon:cmd /c For /f \"tokens=2 delims={}\" %%i In ('Dir /b /s %%windir%%\\installer\\skypeicon.exe 2^>Nul') Do msiexec /x{%%i}"
        Echo Title="Установка %%Name%%"
        Echo BeginPrompt="Сейчас будет установлен %%Name%%%%Vers%%
        Echo.
        Echo Если в системе будет обнаружена старая версия Skype, то она
        Echo будет удалена автоматически перед началом установки.
        Echo.
        Echo Нажав 'OK', удерживая [Shift], можно скрыть процесс установки"
        Echo FinishMessage="%%Name%%%%Vers%% установлен^!"
        Echo GUIFlags="2+4+8+16+32+2048+4096"
        Echo GUIMode="1"
        Echo MiscFlags="4"
        Echo ExtractTitle="Распаковка файлов..."
        Echo ExtractDialogText="Придется подождать..."
        Echo RunProgram="%%DelOldVer%% /qb"
        Echo RunProgram="%nameMsi% /passive /norestart"
        Echo AutoInstall="%%DelOldVer%% /qn"
        Echo AutoInstall="fm20:%nameMsi% /quiet /norestart"
        Echo AutoInstall0="%%DelOldVer%% /qn"
        Echo AutoInstall0="%nameMsi% /quiet /norestart"
        Echo AutoInstall0="hidcon:Reg Delete \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\" /v \"Skype\" /f"
        Echo ;^^!@InstallEnd@^^!)>config_866.txt
        Call :_ChCp UTF8 config_866.txt config.txt

        Echo Упаковка админ. точки в архив ...
        Call :compr Archive.7z "Program Files" "Application Data" %nameMsi%
        Echo Создание SFX
        Copy /b ..\Temp\7zsd_LZMA2.sfx + config.txt + Archive.7z %FullName%\Files\ForceCopy\SVCPACK\%SFXname%.exe>Nul
:: =======================================================
:: Копирование SFX в папку компилятора для проверки. Если не требуется, закоментируйте следующую строку

        Copy %FullName%\Files\ForceCopy\SVCPACK\%SFXname%.exe ..\>Nul
:: =======================================================

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

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

:compr
Start /min /wait "" "%path7Zip%\7zG.exe" a -r %* %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*5/512*5/512
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
For /F "Tokens=1,3* Delims=,:" %%a In ('WMIC OS GET Caption^,CSDVersion /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Echo %%b %%c
Echo Разрядность ОС        - %xOS%
Echo Версия 7-Zip        - %Ver% %Beta% %arch64%  (установлен в %path7Zip%)
Echo RAM всего        - %Aram% МБ
Echo RAM свободно        - %Fram% МБ        (без учета фрагментации)
Echo Макс. словарь        - %dictM% МБ        (исходя из свободных %Fram% МБ)
Echo Реком. словарь        - %dict% МБ        (исходя из макс. словаря %dictM% МБ%limit%)
If Exist bin\suff_size.txt For /F "tokens=1-2" %%i In (bin\suff_size.txt) Do Echo Достат. словарь        - %%i МБ                ^(исходя из размера данных %%j^)
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=-m0=BCJ2 -m1=LZMA2:d%Sdict%m:fb273 -m2=LZMA2:d21:fb273:lp2:lc0 -m3=LZMA2:d21:fb273:lp2:lc0 -mb0:1 -mb0s1:2 -mb0s2:3
:: 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



gora 29-06-2012 08:08 1942493

Код:

@Echo Off
Set Name=123453452361111_4567721765678357
Set rp=%Name:*_=%
Call Set lp=%%Name:_%rp%=%%
Echo %lp%
Echo %rp%
Pause


gora 24-01-2013 21:20 2074260

текст
@Echo Off
SetLocal EnableDelayedExpansion
:: =======================================================

:: Файлы можно скачать здесь:

:: http://download.virtualbox.org/virtu...d.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

картинка


Время: 09:17.

Время: 09:17.
© OSzone.net 2001-