반응형
프리셋 기본값, 1, 2, 3 저장 샘플
Diskpart 파티션 스크립트 v3.5 프리셋 샘플 - 움짤 GIF
└▶ 상태 값 프리셋으로 저장 및 초기화
└▶ 확정된 것은 아니며, 일단 기본적인 기능만 구현
영문 Windows 및 PE 환경에서 디스크 및 파티션 정보 출력 오류 수정
└▶ 한국어와 영문 환경 모두에서 시스템 언어를 우선으로 하여 출력되도록 개선
; Windows API를 사용하여 시스템 언어 확인
Func GetSystemDefaultUILanguage()
Local $hKernel32 = DllOpen("kernel32.dll")
If $hKernel32 = -1 Then
;MsgBox(16, "Error", "Unable to open kernel32.dll.")
Exit
EndIf
Local $aResult = DllCall($hKernel32, "ushort", "GetSystemDefaultUILanguage")
DllClose($hKernel32)
If @error Or Not IsArray($aResult) Then
;MsgBox(16, "Error", "Failed to call GetSystemDefaultUILanguage.")
Exit
EndIf
Return $aResult[0]
EndFunc
; 중복 방지 배열 선언
Local $aUsedDisks = []
; 디스크 정보 추출
Local $aLines = StringSplit($diskContent, @CRLF, 1)
For $i = 0 To UBound($aLines) - 1
Local $sLine = StringStripWS($aLines[$i], 3)
; 언어에 맞는 정규식 선택
Local $aData
If $bIsKorean Then
; 한국어 정규식
If StringRegExp($sLine, "^디스크\s+(\d+)\s+(\S+)") Then
$aData = StringRegExp($sLine, "^디스크\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z가-힣]+)\s+([\d,]+\s+[A-Za-z가-힣]+)\s*(\S*)\s*(\S*)$", 3)
EndIf
Else
; 영어 정규식
If StringRegExp($sLine, "^Disk\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)\s*(\S*)\s*(\S*)$") Then
$aData = StringRegExp($sLine, "^Disk\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)\s*(\S*)\s*(\S*)$", 3)
EndIf
EndIf
If IsArray($aData) Then
Local $diskNumber = $aData[0]
; 이미 출력된 디스크 번호인지 확인
If Not IsInArray($diskNumber, $aUsedDisks) Then
Local $size = $aData[2]
Local $dyn = $aData[4] == "*" ? "GPT" : "MBR"
; detail disk 명령어 실행 및 결과 읽기
FileDelete($sDiskInfoFile) ; 이전 명령 초기화
FileWrite($sDiskInfoFile, "select disk " & $diskNumber & @CRLF & "detail disk" & @CRLF)
RunWait(@ComSpec & " /c diskpart /s " & $sDiskInfoFile & " > " & $sResultFile, "", @SW_HIDE)
Local $detailContent = FileRead($sResultFile)
; 디스크 모델 추출
Local $model = "-"
; 디스크 모델 추출 정규식 수정
If $bIsKorean Then
Local $aModelMatch = StringRegExp($detailContent, "(?m)^([^\r\n]+)\r\n디스크 ID:", 1)
Else
Local $aModelMatch = StringRegExp($detailContent, "(?m)^([^\r\n]+)\r\nDisk ID:", 1)
EndIf
If IsArray($aModelMatch) Then
$model = StringStripWS($aModelMatch[0], 3)
EndIf
; 디스크 정보를 ListView에 추가
GUICtrlCreateListViewItem($diskNumber & "|" & $dyn & "|" & $size & "|" & $model, $hListView)
; 사용된 디스크 번호 배열에 추가
_ArrayAdd($aUsedDisks, $diskNumber)
EndIf
EndIf
Next
; 중복 방지 배열 선언
Local $aUsedPartitionNumbers = []
; 파티션 정보 추출
Local $aLines = StringSplit($partitionContent, @CRLF, 1)
For $i = 0 To UBound($aLines) - 1
Local $sLine = StringStripWS($aLines[$i], 3)
; 언어에 맞는 정규식 선택
Local $aData
If $bIsKorean Then
; 한국어 파티션 정보 정규식
If StringRegExp($sLine, "파티션\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)") Then
$aData = StringRegExp($sLine, "파티션\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)", 3)
EndIf
Else
; 영어 파티션 정보 정규식
If StringRegExp($sLine, "Partition\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)") Then
$aData = StringRegExp($sLine, "Partition\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)", 3)
EndIf
EndIf
If IsArray($aData) Then
Local $partitionNumber = $aData[0]
; 중복 파티션 번호 체크
If Not IsInArray($partitionNumber, $aUsedPartitionNumbers) Then
; 파티션 정보를 ListView에 추가
GUICtrlCreateListViewItem($aData[0] & "|" & $aData[1] & "|" & $aData[2] & "|" & $aData[3], $hListView)
; 사용된 파티션 번호 배열에 추가
_ArrayAdd($aUsedPartitionNumbers, $partitionNumber)
EndIf
EndIf
Next
■ 동영상 제목 클릭 후 전체화면(1080P)시청 가능합니다.
정보가 도움이 되었다면 아래 링크로 커피를 후원 해주세요. ^^
반응형
'자작 프로그램 > Diskpart 스크립트' 카테고리의 다른 글
Diskpart 파티션 스크립트 v4.5 - 기능 개선 중 . . . (0) | 2025.02.04 |
---|---|
Diskpart 파티션 스크립트 v4.0 - 기능 개선(완료) (0) | 2025.01.23 |
Diskpart 파티션 스크립트 v3.0 - 최종 버전 (0) | 2025.01.16 |
Diskpart 파티션 스크립트 v2.5 - MBR 활성화 누락 수정 (0) | 2025.01.13 |
Diskpart 파티션 스크립트 v1.5 출력 개선 (0) | 2025.01.11 |