1

Я работаю в среде Winpe, как получить информацию, если диск 0 разбит на разделы или нет, чтобы запускать определенные команды в каждом случае, когда я пробовал это, но как получить, чтобы это работало правильно в командном файле?

set part_inst=wmic partition list instance

если диск не инициализирован, он вернет:

No Available Instance.

иначе, если разделы найдены, он вернет:

Index
0
1
2

как использовать эту информацию в командном файле для запуска процедуры, подобной этой

if %part_inst% == "No Available Instance." (
Rem execute sequence_1 of commands if disk is **_not partitioned_**
) else (
Rem execute sequence_2 of commands if disk is **_partitioned_**
)

2 ответа2

1

Чтобы сохранить результат выполненной команды в переменной, вы не можете просто присвоить его с помощью set .

Популярный подход заключается в использовании for , как указано в StackOverflow вопрос пакетных файлов Windows: Как установить переменную с результатом команды? ,

Возможно, вам придется объединить это с предложением из Как я могу удалить пустые строки из вывода wmic?:

for /f "skip=1 delims=" %%a in (
  'wmic partition list instance' ^| findstr /r /v "^$"'
) do @set part_inst=%%a
1

Развернув ответ Оливера Зальцбурга, приведем пример фрагмента, который работает из коробки в Windows PE, где по умолчанию доступна только команда find . Я также изменил фактическую проверку переменных, чтобы сделать ее максимально независимой от языка:

@echo off

set part_inst=

for /f "usebackq tokens=2 delims==" %%A in (
`wmic partition list instance /format:list ^| find "="`
) do set part_inst=%%A

if not defined part_inst (
REM execute sequence_1 of commands if disk is **_not partitioned_**
) else (
REM execute sequence_2 of commands if disk is **_partitioned_**
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .