YuS_two
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: @echo off rem v2.1 rem путь к файлу конфигурации VirtualBox set "Vbox=%userprofile%\.VirtualBox\VirtualBox.xml" rem путь к файлу vboxmanage.exe должен быть прописан в системной переменной Path, rem либо для корректного запуска необходимо указать абсолютный путь: set "vbman=vboxmanage.exe" rem ----- rem Инициализация переменных, для поддерживаемых расширений. Число расширений rem можно увеличить добавлением переменных extN, по аналогии с существующими. rem Кроме того, необходимо указать их количество в переменной n set "ext1=*.vdi" set "ext2=*.vhd" set "ext3=" set n=2 rem ----- for /l %%g in (1,1,%n%) do ( if defined ext%%g (call :dper %%g) ) for /l %%h in (1,1,%n%) do ( if defined ext%%h (call :fper %%h) ) goto pp :dper set vn=%1 call set "dext=%%dext%% "%%ext%vn%%%"" exit /b :fper set nv=%1 call set "fext=%%fext%% /c:"%%ext%nv%:~1%%"" exit /b :pp echo Сценарий упаковки файла динамического виртуального диска Oracle VirtualBox. echo Перед упаковкой, необходимо в загруженной гостевой ОС выполнить максимальную echo дефрагментацию, затем заполнить нулями свободное пространство ^(для этого echo хорошо подходит программа sDelete ^(sysinternals.com^)^). echo Примечание: Имя упаковываемого, неподключенного файла виртуального диска НЕ echo должно совпадать с любым подключенным файлом, либо абсолютный путь в сценарии echo должен быть указан только от реально подключенного виртуального диска. echo. choice /c yn /m "Продолжаем " if "%errorlevel%"=="1" goto begin echo. echo Выходим echo. pause&&exit :begin choice /n /c 12 /m "Выберите 1 - для работы с подключенными дисками, 2 - для указания абсолютного пути: " goto disk%errorlevel% :disk1 set "vm=%Vbox%" goto run :disk2 set "vm=" :run cls echo Выполните следующие действия: echo. pushd "%~dp0" if not exist "%vm%" goto out echo Список имен подключенных машин: set cnt=0 for /f tokens^=2^ delims^=^" %%i in ('^<"%vm%" find "MachineEntry"') do call :list "%%~i" echo. goto out :list if "%~1"=="" (echo Нет подключенных машин&&goto out) set /a cnt+=1 set "vbu%cnt%=%~1" call set "tmp=%%vbu%cnt%%%" for /f "tokens=2 delims=: " %%j in ('%vbman% showvminfo %tmp%') do echo %cnt%. %%j&&goto ex :ex exit /b :vbox set ct=0 set "v=%~1" %vbman% showvminfo %v% |findstr /i %fext% >nul if errorlevel 1 (echo Диски не найдены&&exit /b 1) for /f "tokens=3,4 delims=)(" %%a in ('%vbman% showvminfo %v% ^|findstr /i %fext%') do ( call :hd "%%~a" "%%~b" ) exit /b :hd set "$1=%~1" set "$2=%~2" set /a ct+=1 set hd%ct%=%$2:~6% echo %ct% %~nx1 exit /b :out if exist "%vm%" ( echo Выберите номер подключенной VM set /p x="(q=выход): " ) else ( echo Укажите абсолютный путь к каталогу с виртуальным диском set /p x="(q=выход): " goto q2 ) :q1 if "%x%"=="" goto begin if "%x%"=="q" (goto chce) if defined vbu%x% ( echo. echo Список дисков в выбранной виртуальной машине: echo. call :vbox "%%vbu%x%%%" ||goto chce ) else ( goto begin ) goto file :q2 if "%x%"=="" goto begin if "%x%"=="q" (goto chce) set kon=0 for /l %%k in (1,1,%n%) do ( if defined ext%%k call :tm %%k ) goto tt :tm set dn=%1 call set prn=%%ext%dn%%% if exist "%x%\%prn%" set /a kon+=1 exit /b :tt if %kon%==0 (echo.&&echo В этом каталоге нет файлов виртуальных дисков&&echo.&&goto chce) :cont cd /d "%x%" echo. echo Список файлов виртуального диска: echo. set cnt=0 for /f "delims=" %%a in ('dir /a-d/b %dext%') do ( call :per "%%~a" ) goto file :per set /a cnt+=1 set var%cnt%=%~1 call echo %cnt%. %%var%cnt%%% exit /b :file echo. set /p y="Введите номер виртуального диска: " if defined hd%y% (call set "dsk=%%hd%y%%%"&&goto pusk) call set "dsk=%%var%y%%%" if not defined dsk (echo.&&echo Нет такого диска&&goto chce) else (goto pusk) pause&&exit :chce choice /c yn /m "Выходим " goto answ%errorlevel% echo Ошибка. Выходим pause&&exit :answ1 echo Выход timeout /t 3 exit :answ2 goto begin :pusk echo. echo Запускаем упаковку: echo. %vbman% modifyhd "%dsk%" --compact if errorlevel 1 ( echo. echo. echo. Ошибка!!! Имя файла виртуального диска совпадает с именем echo. подключенного файла, при отличающихся абсолютных путях echo. echo. ) echo. goto chce :answ255 :disk255 echo Ошибка&&pause&&exit |
| Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 18:05 30-05-2016 | Исправлено: YuS_two, 22:40 03-06-2016 |
|