| @echo off & setlocal enabledelayedexpansion |
| echo 代码开始 |
| cls |
| |
| |
| echo ——————————————————————————————————————— >nul 2>nul |
| if exist "c:\diskinfo.*" (del /q "c:\diskinfo.*" >nul 2>nul) |
| |
| for /f "delims=:" %%i in ('findstr /n "^:DynamicScript$" "%~f0"') do ( |
| more +%%i "%~f0" > c:\diskinfo.vbs |
| ) |
| |
| ping 127.0.0.1 -n 2 >nul 2>nul |
| cls |
| |
| echo ------------系统引导方式: |
| powershell –NoProfile –ExecutionPolicy Bypass "$env:Firmware_Type" |
| |
| echo. |
| echo ------------硬盘分区表类型:: |
| powershell "get-disk|%%{''+' '+$_.number+' '+' '+$_.partitionStyle+' '+$_.FriendlyName}"|sort |
| |
| |
| echo. |
| echo ------------硬盘空间占用:: |
| cscript /nologo c:\diskinfo.vbs |
| |
| echo ------------硬盘接口协议:: |
| echo. 协议 机械/固态 接口 |
| set "_NVMe=NVMe====SSD ::::::m.2" |
| set "_USB=USB" |
| set "_SATA=SATA====HDD/SSD::::::SATA-MSATA-m.2" |
| for /f "tokens=2,4,5" %%a in ('"echo list disk|diskpart|findstr /irc:"磁盘 *[0-9]""') do ( |
| for /f "tokens=3" %%i in ('"(echo sel disk %%a & echo detail disk & echo list part)|diskpart|findstr /irc:"类型 *:""') do ( |
| if defined _%%i echo %%a: !_%%i! %%b %%c |
| ) |
| ) |
| |
| pause >nul |
| if exist "c:\diskinfo.*" (del /q "c:\diskinfo.*" >nul 2>nul) |
| exit |
| |
| |
| |
| |
| |
| CScript /NoLogo c:\diskinfo.vbs>c:\diskinfo.txt |
| ping 127.0.0.1 -n 2 >nul 2>nul |
| cls |
| |
| Type c:\diskinfo.txt |
| |
| |
| |
| echo ——————————————————————————————————————— >nul 2>nul |
| if exist "c:\diskinfo.*" (del /q "c:\diskinfo.*" >nul 2>nul) |
| |
| set "vbs=c:\diskinfo.vbs" |
| set "log=c:\diskinfo.log" |
| for /f "delims=:" %%i in ('findstr /n "^:DynamicScript$" "%~f0"') do (more +%%i "%~f0" > "%vbs%") |
| CScript //NoLogo "%vbs%" > "%log%" |
| |
| cls |
| type "%log%" |
| |
| ping 127.0.0.1 -n 5 >nul 2>nul & if exist "c:\diskinfo.*" (del /q "c:\diskinfo.*" >nul 2>nul) & exit/b |
| |
| goto :eof |
| |
| |
| |
| echo ——————————————————————————————————————— >nul 2>nul |
| :DynamicScript |
| Main |
| Sub Main() |
| Dim objWMI, colDisks |
| Set objWMI = GetObject("winmgmts:\\.\root\cimv2") |
| Set colDisks = objWMI.ExecQuery("select * from Win32_DiskDrive where MediaType like 'fixed%'") |
| ' 获取硬盘最大序号 |
| nIndexMax = 0 |
| For Each objDisk in colDisks |
| If Cint(objDisk.Index) > nIndexMax Then nIndexMax = Cint(objDisk.Index) |
| Next |
| ' 按序号取信息 |
| For i = 0 To nIndexMax |
| For Each objDisk in colDisks |
| ' 只取该序号信息 |
| If objDisk.Index = i Then |
| s = s & "硬盘" & objDisk.Index & ":" & vbTab |
| s = s & "大小:" & GetSize(objDisk.Size) & vbTab |
| s = s & "型号:" & objDisk.Caption & vbCrLf |
| 's = s & "型号:" & objDisk.Caption & vbTab |
| 's = s & "分区表:" & IsGPT(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 |
| End If |
| Next |
| Next |
| |
| WScript.Echo s |
| End Sub |
| |
| ' 格式化 |
| 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 |
| |
| ' 获取指定硬盘的分区表类型(GPT/MBR) |
| Function IsGPT(ByVal nDiskIndex) |
| IsGPT = "MBR" |
| Dim wso, sLogFile, sText |
| Set wso = CreateObject("WScript.Shell") |
| sLogFile = wso.ExpandenVironmentStrings("%temp%\diskpart.log") |
| wso.Run "cmd /c ""chcp 437 & cls & (echo list disk | diskpart | find /i ""Disk " & nDiskIndex & """) >""" & sLogFile & """ "" ", 0, False |
| Call TxtFile(sLogFile, 1, -2, sText) |
| If Trim(Right(sText,3)) = "*" Then IsGPT = "GPT" |
| End Function |
| |
| ' 对文本指定编码进行读写操作2 |
| 'nRW: 1只读, 2只写, 8追加 'nCharset: -2(系统), -1(Unicode), 0(ASCII) |
| Sub TxtFile(ByVal FileName, ByVal nRW, ByVal nCharset, ByRef sText) |
| Dim fso : Set fso = CreateObject("Scripting.filesystemobject") |
| If sText <> "" And (nRW = 2 Or nRW = 8) Then |
| fso.OpenTextFile(FileName, nRW, True, nCharset).Write sText |
| ElseIf fso.FileExists(FileName) And nRW = 1 Then |
| If fso.GetFile(FileName).Size > 0 Then _ |
| sText = fso.OpenTextFile(FileName, nRW, False, nCharset).ReadAll |
| End If |
| End Sub |
| |
| ' 以管理员身份运行 |
| Sub RunAsAdmin() |
| Dim objItems, objItem, strVer, nVer |
| Set objItems = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem") |
| For Each objItem In objItems |
| strVer = objItem.Version |
| Next |
| nVer = Split(strVer, ".")(0) & Split(strVer, ".")(1) |
| If nVer >= 60 Then |
| Dim oShell, oArg, strArgs |
| Set oShell = CreateObject("Shell.Application") |
| If Not WScript.Arguments.Named.Exists("ADMIN") Then |
| For Each oArg In WScript.Arguments |
| strArgs = strArgs & " """ & oArg & """" |
| Next |
| strArgs = strArgs & " /ADMIN:1" |
| Call oShell.ShellExecute("WScript.exe", """" & WScript.ScriptFullName & """" & strArgs, "", "runas", 1) |
| Set oShell = Nothing |
| WScript.Quit(0) |
| End If |
| Set oShell = Nothing |
| End If |
| End SubCOPY |