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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista (http://forum.oszone.net/forumdisplay.php?f=83)
-   -   BAT/CMD скрипт-меню для dism.exe (http://forum.oszone.net/showthread.php?t=331979)

sosed213 18-12-2017 11:49 2785162

BAT/CMD скрипт-меню для dism.exe
 
Вложений: 3
На днях обновлял свои образы c windows 7, и для облегчения работы накидал небольшой скрипт-меню для утилиты dism.

Скрипт выполнен в виде меню.
Реализованы базовые возможности dism для работы с offline образами.

Основные возможности:
  • получить информацию о wim-файле.
  • Монтировать образ.
  • Применить образ.
  • Экспортировать образ.
  • Захват/Добавления образа.
  • Интегрирование пакетов обновлений.
  • Интегрирование драйверов.

В скрипте используются переменные, которые можно изменить вручную в файле (файл сохранен в кодировке 866 OEM) , или при запуске скрипта, в меню.

Есть пункт меню Сценарии, но его я не прорабатывал. Идея сценариев - автоматизировать весь процесс.
Возможны ошибки и неточности.
Скрипт можно доделать, переделать под себя.

25.12.2017 Обновил скрипт. Условно v1.1. Исправлены ошибки. Переработано меню. Работа продолжается.

Ж.Д.А.Л.К.Е.Р. 18-12-2017 12:41 2785172

Небольшая подсказка, лучше вместо
Код:

set choice=
Set /p choice="Ваш выбор: "
if not defined choice goto menu0
if "%choice%"=="1" (goto menu1)
if "%choice%"=="2" (goto menu2)
if "%choice%"=="3" (goto menu3)
if "%choice%"=="4" (goto menu4)
if "%choice%"=="9" (goto menu9)
if "%choice%"=="0" (goto ExitAll)
Echo.
Echo Не правильно сделан выбор задания
Echo.
Echo.
goto menu0
pause >nul

написать
Код:

Choice /c 123490 /n /m "Ваш выбор: "
GoTo menu%ErrorLevel%

и перед :ExitAll добавить строку :menu0. Тогда невозможно будет нажать клавишу кроме заданных , просто не сработает, конструкция проще и меньше строчек кода. И так заменить все остальные Set /p.

sosed213 22-12-2017 10:01 2786199

Ж.Д.А.Л.К.Е.Р., предложение по оптимизации хорошее, но принцип работы у Choice узкоспециализированный.

Я делал меню чтобы понятнее(приятнее) было работать с меню. Т.е. например 0 - это выход. Но Choice вернет вместо нуля его индекс, т.е. 6. И логика построения меню станет запутанной.

Choice /c 123490 /n /m "Ваш выбор: "

Придется применять мою конструкцию с условием, и небольшой переделкой:
if "%ErrorLevel%"=="1" (goto menu1)
if "%ErrorLevel%"=="2" (goto menu2)
if "%ErrorLevel%"=="3" (goto menu3)
if "%ErrorLevel%"=="4" (goto menu4)
if "%ErrorLevel%"=="4" (goto menu9)
if "%ErrorLevel%"=="5" (goto ExitAll)

Iska 22-12-2017 12:39 2786216

Цитата:

Цитата sosed213
И логика построения меню станет запутанной. »

Логика будет ровно той, что описана в документации. Вашу конструкцию с кучей if применять не требуется.

sosed213 25-12-2017 10:55 2786797

Обновил скрипт. Описание в шапке.

osmaster 29-01-2018 15:03 2794378

Посмотрел скрипт. Есть вопросы-замечания:
1) Командами SET вначале жестко задаются пути источника, папки монтирования и т.д. Почему бы не использовать относительные пути - относительно места запуска скрипта?
2) К команде dism не нужно приписывать расширение .exe. Запускать лучше с ключом /LogLevel:1, чтобы не перегружать log-файл излишней информацией, регистрируя лишь сообщения об ошибках.
3) В скрипте работа ведётся только с автономным файлом образа (обычно install.wim). Но установленная ОС это тоже образ, только "развёрнутый" и система DISM умеет выполнять обслуживание онлайн. В данном скрипте это не реализовано.
4) В меню скрипта нет пунктов позволяющих посмотреть (получить) сведения о содержимом образа. Я имею ввиду списки уже интегрированных в образ драйверов и обновлений, состояния (вкл/выкл) компонентов ОС.
5) Что если попытаться интегрировать обновление которое уже имеется в образе? Проверка наличия в скрипте не выполняется. Система DISM потом "поймёт" (когда всё распакует и приготовится интегрировать), но время буде потеряно напрасно.

Имею свою коллекцию скриптов для работы с автономными образами и обслуживания онлайн. Частично "раскрываю карты" и выкладываю их на Habrahabr (ссылка на список моих постов). Может быть найдёшь там для себя полезную информацию.

sosed213 02-02-2018 14:16 2795312

osmaster, с чем то соглашусь, но решений удовлетворяющих каждого не бывает.
1) Да, в некоторых случаях будет удобно работать с относительными путями, подумаю над этим.
2) Стараюсь всегда добавлять соответствующее расширение, как в данном случае ".exe", чтобы не было не понятных глюков. В некоторых системах, если не указать .exe, скрипт как бы циклически перезапускается. /LogLevel:1 да, будет полезен.
3 и 4) Скрипт делал под конкретную задачу, но его можно масштабировать до полноценного DISM-Menu.
5) Дополнительные проверки будут полезны.

Спасибо за ссылку на habrahabr, есть интересные скрипты.


Время: 06:46.

Время: 06:46.
© OSzone.net 2001-