Windows-Command-Prompt

從批處理文件中的diskpart獲取分區大小的變數

  • January 25, 2022

僅當特定分區至少為一定大小時,我才嘗試執行部分批處理文件。我在這裡找到了一個在批處理文件中使用的 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 gb),然後格式化該分區,然後執行一些我已經製作並正在執行的批處理文件。

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命令對磁碟大小使用 KB/MB/GB/TB 後綴,因此會根據已知值檢查後綴以消除太小的磁碟,但也能夠處理轉換後的 1 到 199 TB 之間的磁碟到 1024 - 203776 GB 進行比較。

可以在底部的黑色程式碼中放置其他命令,以進一步自動化該過程。

引用自:https://serverfault.com/questions/783125