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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Получить список дисков\разделов

Ответить
Настройки темы
CMD/BAT - [решено] Получить список дисков\разделов

Новый участник


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

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


Все доброго дня! Будьте добры, помогите советом... Создаю массивный сценарий для восстановления файлов загрузчиков разных версий Windows , всё в принципе работает, всё прекрасно - кроме одного момента в самом начале сценария. Никак не могу автоматизировать следующий процесс : необходимо получить список физических дисков, затем разделов на выбранном диске, затем буквы выбранного раздела - и выполнить копирование нескольких файлов в корень выбранного раздела. И всё это в пошаговое меню, аналогично diskpart - только без ввода команд, а с выбором вариантов. Реально, как считаете ?

Отправлено: 06:39, 18-12-2015

 

Забанен


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

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


Не совсем ясно, что мешает использовать тот же diskpart, ведь вышеобозначенные операции все равно по сути требуют наличия прав администратора? Так, например, чтобы получить список дисков:
Код: Выделить весь код
echo list disk | diskpart | findstr /vrc:"\." | findstr [0-9]
Или размелов:
Код: Выделить весь код
echo list volume | diskpart | findstr /vrc:"\." | findstr [0-9]
Полученные данные прогнать через for и все.
Есть и альтернативные решения, по крайней мере относительно активного жесткого диска и его разделов.
typeperf
Код: Выделить весь код
@echo off
  setlocal&chcp 1251>nul
    for /f "tokens=2 delims=)(" %%i in (
      'typeperf -qx "\Физический диск" ^| findstr /rc:"\:"'
    ) do set "active=%%i"
    for %%i in (%active%) do (
      (echo:%%i|>nul findstr [0-9])&&(
        echo:Disk %%i
      )||(
        echo:Volume %%i
      )
    )
  endlocal&chcp 866>nul
exit /b
Реестр
Получить разделы активного жесткого диска можно через реестр.
Код: Выделить весь код
@echo off
  setlocal enabledelayedexpansion
    set "key=HKLM\SYSTEM\MountedDevices"
    for /f "tokens=1,3" %%i in (
      'reg query %key% ^| findstr /rc:"\?"'
    ) do (
      for /f "tokens=1,3" %%k in (
        'reg query %key% ^| 2^>nul findstr %%j ^| findstr /rc:"\:"'
      ) do (
        if "%%j" equ "%%l" set "drv=%%k"
        set "drv=!drv:\DosDevices\=!"
        echo !drv! %%i
      )
    )
  endlocal
exit /b
Или mountvol.
Получить разделы активного жесткого диска также можно через гибридную технику - CMD\JS.
Код: Выделить весь код
0</* :
@cscript /nologo /e:jscript "%~f0" %*&exit /b */0;
(function() {
  with (new ActiveXObject('Scripting.FileSystemObject')) {
    for (var e = new Enumerator(Drives); !e.atEnd(); e.moveNext()) {
      if (e.item().DriveType === 2) WScript.echo(e.item().Path);
    }
  }
}());
Есть и другие варианты и способы решения задачи, но перечислять их все довольно утомительно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:55, 18-12-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


спасибо большое ! очень помогло, схоронил.

а что касательно прикручивания меню и создание переменной не подскажете? допустим командой echo list disk | diskpart | findstr /vrc:"\." | findstr [0-9] - я получил список дисков. Теперь нужно основываясь на полученных данных создать меню, где кол-во пунктов = кол-ву найденных дисков. Затем от пользователя потребуется ввод номера диска, сбросить выбранный вариант в переменную, чтобы дальше работать с этим диском. Затем то же самое с выбором раздела именно на выбранном диске. То есть возможно ли в итоге получить три переменные, где 1 - имя выбранного диска, 2 - имя раздела, 3 - буква раздела (с которой скрипт и будет работать дальше), если буквы нет - смонтировать ?

Отправлено: 14:14, 18-12-2015 | #3


Новый участник


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

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


"Не совсем ясно, что мешает использовать тот же diskpart" - если его можно поместить рядом со скриптом и он будет работать в любых PE средах, то конечно можно... но хотелось бы как то автоматизировать и упростить, где от пользователя потребуется только ввод номера, а не всей команды к diskpart.

Отправлено: 14:48, 18-12-2015 | #4


Забанен


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

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


Сперва просите просто направить дао в нужное русло, теперь по сути просите реализовать за Вас некую систему, - резонно спросить: какова цена вопроса? Если расчитываете на "даром", то ждите ответа других.

Отправлено: 16:05, 18-12-2015 | #5


Новый участник


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

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


нет, реализация системы тут не при чем. А в принципе проблема решилась достаточно просто ... попросил знакомого написать простой автономный инсталлятор , позволяющий выбрать диск и раздел, в корень которого необходимо извлечь файлы. Наличие буквы как и среды , в которой он запускается - не играет никакой роли (уже импровизация, что лично по мне - очень удачно). Так что можно тему считать закрытой.

Отправлено: 16:37, 18-12-2015 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Получить список дисков\разделов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Получить список шрифтов eus_deus AutoIt 3 31-10-2013 22:31
[решено] Получить список каталогов в каталоге olann AutoIt 2 03-12-2011 20:33
получить список занятых ip в сети dark_n Сетевые технологии 2 06-07-2007 09:17
Удаленно получить список процессов Dronec Сетевые технологии 1 25-09-2004 12:49
Удаленно получить список процессов Dronec Защита компьютерных систем 4 24-09-2004 14:41




 
Переход