
bat調用vbs代碼檢測顯示磁盤序號是什么規則最后由 ygqiang 于 -3-25 06:33bat調用vbs代碼,檢測顯示磁盤序號是什么規則?不同的主機,顯示的磁盤序號順序:有時候是:4,3, 1 ,2 ,0, 5有時候是:0,4,2,3,1。有時候是:1,0。有時候是:0,1。有時候是:2,0,1。主要要求:磁盤序號按順序顯示。并且分區表格式(GPT或MBR)顯示正確。下面這個vbs代碼,分區表格式(GPT或MBR)顯示正常。問題是:磁盤序列號排列會亂序。nload="thumbImg(this)" alt="" />nload="thumbImg(this)" alt="" />nload="thumbImg(this)" alt="" />
nclick="copycode($('code0'));">復制代碼
- @echo off
- echo.
- echo.
- (
- echo list disk
- echo exit
- ) | diskpart
- ping 0 -n 5 >nul 2>nul
- echo.
- echo.
- cscript //Nologo 引導方式-硬盤格式.vbs
- echo.
- echo.
- ping 0 -n 12 >nul 2>nul
- exit
nclick="copycode($('code1'));">復制代碼
- Set ws = CreateObject(Wscript.Shell)
- Set fso = CreateObject(scripting.FileSystemObject)
- If LCase(Right(WSH.FullName, 11)) = wscript.exe Then
- ws.run cscript.exe -nologo & WSH.scriptFullName & , 0
- WSH.Quit
- End If
- Dim arr()
- Set oExec = ws.Exec(cmd /c (echo;list disk|diskpart)|findstr /irc:[0-9][0-9]**[tgmk]b )
- Do While oExec.StdOut.AtEndOfStream <> true
- str = Trim(oExec.StdOut.ReadLine)
- num = CInt(Split(str, )(1))
- ReDim Preserve arr(num)
- If InStrRev(str, *) >0 Then
- arr(num) = GPT
- Else
- arr(num) = MBR
- End If
- Loop
- Dim objWMI, colDisks
- Set objWMI = GetObject(winmgmts:.rootcimv2)
- Set colDisks = objWMI.ExecQuery(select * from Win32_DiskDrive where MediaType like 'fixed%')
- For Each objDisk in colDisks
- s = s & 硬盤 & objDisk.Index & : & vbTab
- s = s & 大小: & GetSize(objDisk.Size) & vbTab
- s = s & 型號: & objDisk.Caption & vbTab
- s = s & 分區表: & arr(CInt(objDisk.Index)) & vbCrLf
- strDiskID = Replace(objDisk.DeviceID, , )
- Set colPartitions = objWMI.ExecQuery _
- (ASSOCIATORS OF {Win32_DiskDrive.DeviceID= & strDiskID & } _
- & where AssocClass=Win32_DiskDriveToDiskPartition)
- For Each objPartition in colPartitions
- strPartId = objPartition.DeviceID
- Set colLogicalDisks = objWMI.ExecQuery _
- (ASSOCIATORS OF {Win32_DiskPartition.DeviceID= & strPartId & }where AssocClass=Win32_LogicalDiskToPartition)
- For Each objLogicalDisk in colLogicalDisks
- size = objLogicalDisk.Size
- free = objLogicalDisk.Freespace
- used = FormatNumber((size - free) / size * 100, 2, true) & %
- s = s & 分區 & objLogicalDisk.DeviceID & vbTab
- s = s & 大小: & GetSize(size) & vbTab
- s = s & 剩余: & GetSize(free) & vbTab
- s = s & 使用率: & used & vbCrLf
- Next
- Next
- s = s & vbCrLf
- Next
- 'Msgbox s
- Wscript.Echo s
- Function GetSize(intSize)
- If intSize/1024/1024 > 1024 Then
- GetSize = FormatNumber(intSize/1024/1024/1024, 2, true) & GB
- Else
- GetSize = FormatNumber(intSize/1024/1024, 2, true) & MB
- End If
- End Function

