Вы можете использовать for /F
для анализа вывода команды, например, командной строки wmic
.
Во-первых, нам нужно собрать подходящую wmic
команду:
wmic LOGICALDISK WHERE (DriveType=3 AND Size^>0) GET Name /VALUE
Давайте использовать LOGICALDISK
, а не чем VOLUME
, потому что последний возвращает также детали без буквы диска и системных разделов зарезервирован.
Фильтр DriveType=3
включает только локальные диски; фильтр Size>0
исключает неформатные элементы (>
должен быть экранирован как ^>
в командной строке, потому что >
имеет специальное значение - перенаправление).
Коммутатор /VALUE
сообщает wmic
, чтобы вернуть линии, такие как Name=C:
.
Затем мы оборачиваем вокруг правильного for /F
команды (см также for /?
для справки):
for /F "tokens=2 delims==" %%V in ('
wmic LOGICALDISK WHERE ^(DriveType^=3 AND Size^^^>0^)^
GET Name /VALUE
') do for /F "delims=" %%L in ("%%V") do (
echo.%%L
rem Here you may add your `vssadmin` command lines:
vssadmin create shadow /for=%%L >> C:\temp\vssoutput.txt
::
vssadmin delete shadows /for=%%L
)
Есть на самом деле два вложенных for /F
петли: внешний один разбирает вывод wmic
командной строки и перечислены все найденные диски; внутренняя итерация выполняется ровно один раз на диск и предназначена для удаления символов возврата каретки, которые могут быть добавлены командой wmic
.
Для использования построенной выше командной строки wmic
в пределах for /F
необходимо выделить несколько специальных символов; это объясняет дополнительные символы ^
.
включить также в точках монтирования вывода команды wmic
, вы можете использовать следующую командную строку:
wmic VOLUME WHERE (DriveType=3 AND FileSystem^>"" AND SystemVolume=FALSE) GET Name
Фильтр DriveType=3
включает только локальных дисков; фильтр FileSystem>""
исключает неформатные элементы; фильтр SystemVolume=FALSE
исключает системные зарезервированные разделы.
Чтобы проанализировать выходные данные с помощью for /F
, вам необходимо избежать специальных символов на ^
, как указано выше.
Привет, спасибо за отклик - я вижу, что это работает шармом для логических дисков, однако моя основная проблема здесь - mounpoints - к сожалению, Logicaldisk не предоставляет информацию об этом - следовательно, ссылка на использование команды wmic volume. любые идеи о том, как это можно разместить? – Vanelder
См. Мой [edit] (http://stackoverflow.com/revisions/32979578/2): я добавил командную строку 'wmic VOLUME', поэтому теперь должны быть включены точки монтирования; обратите внимание, что диски с единственными буквами, такими как 'D:', теперь передаются в 'vssadmin' с завершающим' \ ', поэтому' D: \ ', противоположным варианту' wmic LOGICALDISK', где передается 'D:'. .. – aschipfl
Perfect, спасибо !! – Vanelder