Назад | Перейти на главную страницу

получение переменных размера раздела из diskpart в командном файле

Я пытаюсь выполнить часть командного файла, только если конкретный раздел имеет хотя бы определенный размер. Я нашел здесь пример использования diskpart в пакетном файле: https://stackoverflow.com/questions/18477576/get-the-amount-of-partitions-on-a-disk-0-using-batch-file

Но когда я пытаюсь изменить его, чтобы получить то, что мне нужно, он полностью перестает работать. Я вернулся к этому:

@ECHO OFF
ECHO select disk 0 > temp.scr
ECHO list partition >> temp.scr
diskpart /s temp.scr | findstr /r "Partition.[0-9]" > temp.txt
pause

основываясь на том, как я ДУМАЛ, что оригинал работает, разве это не должно выводить строку, найденную с помощью регулярного выражения, в temp.txt? temp.exe пуст, что бы я ни пытался.

Как бы то ни было, конечная цель - загрузить командный файл в образ winPE, который затем автоматически запускается с помощью startnet.cmd. Этот командный файл просматривает каждый раздел на диске, находит соответствующий (в данном случае больше ~ 200 ГБ), затем форматирует этот раздел, а затем запускает еще несколько командных файлов, которые я уже создал и работаю.

Этот командный файл захватит все записи разделов и проанализирует их на ряд временных переменных среды в пределах For команда

@Echo Off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
(
ECHO list disk
ECHO select disk 0
ECHO list partition
) > %~dp0temp.scr
For /F "usebackq tokens=2,3,4,5,6,7" %%P IN (`diskpart /s %~dp0temp.scr ^| findstr /r "Partition.[0-9]"`) DO (
    If /i "%%S" EQU "KB" (
        REM Skip drives sized in KiloBytes
    ) Else If /i "%%S" EQU "MB" (
        REM Skip drives sized in MegaBytes
    ) Else (
        REM GB/TB
        If /i "%%S" EQU "GB" Set /A intSize=%%R * 1
        If /i "%%S" EQU "TB" Set /A intSize=%%R * 1024
        If !intSize! GEQ 200 (
            Echo Partition %%P  Type %%Q    Size !intSize! GB   Offset %%T %%U
            Call :s_Work_Partition %%P
        )
    )
)
ENDLOCAL
pause
Goto :EOF
:s_Work_Partition
REM First parameter is disk partition number
If "%~1" EQU "" Goto :EOF
::  %~1 contains the partition number from disk 0
::  it can be used to run any disk command within this command block.


Goto :EOF

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

Поскольку DiskPart команда использует суффиксы КБ / МБ / ГБ / ТБ для размера диска, суффикс проверяется на соответствие известным значениям, чтобы исключить диски, которые слишком малы, но также может обрабатывать диски размером от 1 до 199 ТБ, которые преобразуются в 1024 - 203776 ГБ для сравнения.

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