wmic logicaldisk
Эта команда покажет все логические диски, зарегистрированные в системе. А как бы нам отсечь ненужные разделы? Это можно сделать, отфильтровав вывод команды по полю volumename, а делается следующим образом:
wmic logicaldisk where volumename="OS"
В ответ получаем тонну сведений об интересующем нас логическом диске. Далее - выбираем из этого потока информации букву диска:
wmic logicaldisk where volumename="OS" get deviceID
Выводом в моем случае является вот это:
DeviceID
C:
Итак, почти добрались. Теперь бы еще избавиться от первой строки вывода. Не вопрос - воспользуемся "трубой" (конвейером) и командой поиска findstr:
wmic logicaldisk where volumename="OS" get deviceID | findstr :
Да, ищем символ двоеточия, который всегда присутствует рядом с именем диска. Получаем то, что нужно:
C:
Ну и самое вкусное - как бы теперь этот вывод утрамбовать в переменную. Именно та точка, где я снова и снова вспоминаю добрым словом Powershell, потому что там вывод можно просто присвоить некой переменной. В CMD нам это недоступно, поэтому будем обманывать через оператор FOR.
Согласен, что использование временного файла для этих целей - пальба из пушки по воробьям, но учитывая просто мозгодробительный синтаксис FOR - чем проще решение, тем оно надежнее.