Я пытаюсь выполнить часть командного файла, только если конкретный раздел имеет хотя бы определенный размер. Я нашел здесь пример использования 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 ГБ для сравнения.
Дополнительные команды могут быть помещены в черный код внизу для дальнейшей автоматизации процесса.