반응형

프리셋  기본값, 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)시청 가능합니다.

 

정보가 도움이 되었다면 아래 링크로 커피를 후원 해주세요. ^^

donaricano-btn

반응형

+ Recent posts