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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Получить список дисков\разделов (http://forum.oszone.net/showthread.php?t=309340)

id334492052@vk 18-12-2015 06:39 2586018

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

greg zakharov 18-12-2015 09:55 2586055

Не совсем ясно, что мешает использовать тот же 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);
    }
  }
}());

Есть и другие варианты и способы решения задачи, но перечислять их все довольно утомительно.

id334492052@vk 18-12-2015 14:14 2586164

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

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

id334492052@vk 18-12-2015 14:48 2586175

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

greg zakharov 18-12-2015 16:05 2586191

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

id334492052@vk 18-12-2015 16:37 2586200

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


Время: 21:57.

Время: 21:57.
© OSzone.net 2001-