DiskPart Advanced Script ConsoleАвтор: GeStart Live a.k.a GemoStarter Системные требования: Windows XP или новее DiskPart ASC - Программа, предназначенная для упрощения использования скриптов для программы DiskPart, встроенного в Windows консольного менеджера разделов. Использование ASC устраняет необходимость всякий раз перед использованием скрипта сверяться со списком имеющихся дисков и изменять скрипт, подставляя в него номера нужных дисков и разделов. После запуска ASC будет выведен список всех доступных для работы физических дисков. После выбора диска будет выведена более детальная информация о нём, а так же список имеющихся на нём разделов. После выбора раздела будет отображена более детальная информация о нём. Выбрав диск и, если нужно, раздел, можно будет выбрать один из заранее подготовленных скриптов в выпадающем списке. После нажатия кнопки "Run Script" ASC автоматически подставит номера диска и раздела в нужные места скрипта, и передаст его присутствующему в системе diskpart.exe. ОСТОРОЖНО: В архиве с программой присутствуют два скрипта. Они удаляют с диска имеющуюся таблицу разделов (командой CLEAN), создают новую таблицу GPT или MBR (зависит от скрипта) и структуру разделов для установки Windows. Скрипты приложены, в основном, для демонстрации функционала, но полностью работоспособны, и при случайном запуске не на том диске обрекут вас на долгое и мучительное восстановление информации.
О скриптах:
Автоматическая подстановка номеров диска и раздела в скрипт достигается за счёт использования в скрипте переменных: #ANTI# - Заглушка, предотвращающая случайный запуск скрипта без ASC, рекомендуется размещать первой строкой #DISK# - Номер диска #PART# - Номер раздела #VOLU# - Номер тома, соответствующего #PART# #PSTL# - Стиль разделов диска #DISK# #GSEC# - Размер сектора #DISK# из информации о геометрии диска #PSEC# - Размер физического сектора #DISK# (не все диски его сообщают) #LSEC# - Размер логического сектора #DISK# (не все диски его сообщают) #MNTP# - Точка монтирования раздела #PART# (без конечного "\") #MNTPF№# - Свободная буква диска, № это номер свободной буквы, если букв не хватит для всех номеров, скрипт не запустится В скриптах поддерживаются простые вычисления. Выражение должно быть заключено в фигурные скобки,например: { 2 * 2 } На место этого выражения будет подставлен его результат, то есть 4. Вкладывать выражения друг в друга нельзя! Ошибки внутри выражений не проверяются, будьте внимательны. Поддерживаются операторы: ^ - Возведение в степень * - Умножение / - Деление + - Сложение - - Вычитание Не все йогурты одинаково полезны, и не все скрипты одинаково хорошо подходят для разных сценариев работы. К примеру, скрипт, написанный для MBR-дисков, будет непригоден для работы с GPT, и наоборот. Кроме того, некоторым скриптам достаточно выбрать только диск, другим же необходимо знать и раздел. Отсеять безусловно неподходящие скрипты поможет соблюдение шаблона именования: DPMGRSEAU.AnyText Собственно шаблоном здесь является DPMGRSEAU, то есть текст, располагающийся до первой точки. Всё, что находится после неё, игнорируется программой. D - Для работы скрипту необходим номер диска P - Необходим номер раздела M - Поддерживается стиль разделов MBR G - Поддерживается стиль разделов GPT R - Поддерживаются RAW-диски (без таблицы разделов) S - Поддерживаются диски со стандартным форматом сектора (512 байт как физически, так и логически) E - Поддерживаются диски с форматом сектора 512e (4096 байт физически, 512 байт логически) A - Поддерживаются диски с форматом сектора 4K (4096 байт как физически, так и логически) U - Поддерживаются диски с неизвестным форматом сектора (любые другие комбинации, в том числе если диск не сообщает размер #PSEC# и #LSEC#) Если скрипт может работать с любым стилем разделов и RAW, то можно не указывать стиль в шаблоне. Если размер сектора не играет роли, в шаблоне нужно указать 0 либо не указывать чисел вовсе. Если скрипт может работать без диска, раздела, вне зависимости от стиля разделов и размера сектора, шаблон можно оставить пустым. Можно и удалить шаблон вовсе, но во избежание неожиданного поведения лучше указать пустой. То есть .AnyText
Интерфейс:
1 - Список дисков 2 - Детальная информация о диске, выбранном в 1 3 - Список разделов на диске, выбранном в 1 4 - Детальная информация о разделе, выбранном в 3 5 - Список скриптов 6 - Запуск скрипта, выбранного в 5 7 - Запуск DiskPart без скрипта (для ручной работы)
Благодарности:
sergeysvirid, Adler, nikzzzz, vovan1982, Ander_73 и все, кого забыл упомянуть - за тестирование программы и ценные советы
Последний раз редактировалось: Gemostarter (2019-07-24 17:04), всего редактировалось 8 раз(а)
54025парсятся не зависимо от языка, пример - list disk
Это код для list partitions... С ним проблем и так не возникало, а вот об list disk и list volume с этими их пустыми полями все мозги сломал... Черт с ним, логику программы ломать сейчас не собираюсь, меня пока больше волнует корректность копирования exe и mui в сборках, где они отсутствуют, кроме 7 (не PE) нигде это не тестировал.
Ander_73, Подумаю, как лучше обозначить, что зачем Кстати, отдельный список томов (именно томов) нужен или нет? Преимуществ он, КМК, не даст - вся инфа уже есть в поле информации о разделе...
Gemostarter, тома вообще имеют смысл только в случае RAID. Иначе они совпадают с разделами. --- На мой вкус, самое правильное - это список дисков и под каждым диском, при нажатии "на крестик", раскрывается дерево разделов (не могу сразу найти внятный скриншот; надеюсь, ты понял, о чём я).
Ander_73, Древовидную структуру можно сделать, но будет менее наглядно - аккуратной таблички она не подразумевает. Это затруднит идентификацию дисков и разделов "с первого взгляда", к тому же усложнив код вычленения из этой инфы номера диска/раздела. Оно нам надо? А как сделать, чтобы и волки целы, и овцы сыты, я даже не знаю...
У тебя во второй таблице отображаются сразу ВСЕ разделы ВСЕХ дисков что-ли? Я думал, всё равно надо "встать" на диск, чтобы во второй таблице отобразились его разделы. И тогда гораздо нагляднее именно разворачивать дерево разделов выбранного диска. Тогда нужно только два окна (главное и свойства) и не будет путаницы, какого диска раздел сейчас текущий (в твоём же случае надо совместить информацию из ТРЁХ окон - диск, раздел, инфа) Но это сугубое имхо. --- УПД. Или, действительно, сразу в одной таблице выводить ВСЕ диски и под ними ВСЕ разделы. Старт будет затруднён, зато сразу всё наглядно. Гы.
Ander_73, Не, разделы только для выбранного диска выводятся, конечно Но юзеру нет необходимости помнить номер диска в тот момент, как он будет выбирать раздел. Да и вообще никакой необходимости знать номера нет - обычно диски и разделы идентифицируют по размеру, для более сложных случаев предусмотрены поля расширенной информации (справа). И вполне можно, убедившись, что выбран Тот_Самый_Диск, запомнить только то что он Тот_Самый, и спокойно хлопать глазами, разбираясь в его разделах. З.Ы. А выводить все разделы сразу мне даже проще - структура с данными о диске включает информацию обо всех его разделах. При построении списка дисков эта инфа просто игнорируется, а в момент выбора диска запрашивается заново.
Кстати, кому-нибудь известен надёжный способ определить, является раздел "основным" или "логическим"? Консольные проги и WMI не предлагать. Кроме того, метод д.б. совместим с WinXP и большинством WinPE. Пока реализовал определение по косвенном признаку, не уверен, что будет работать везде...
vovan1982, основной раздел может и не быть активным. Gemostarter, посмотрите в спецификации стандарта, может и вправду регламентируется так, что можно HEX-значения считывать (менеджеры разделов как-то узнают об этом...).
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы