找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 88423|回复: 22

[系统相关] [已解决]批处理如何判断多个硬盘分别/各自是MBR分区还是GPT分区?

[复制链接]
发表于 2015-1-2 01:04:59 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-5-2 00:42 编辑

[已解决]如果有2个或者多个硬盘,如何判断每个硬盘是MBR分区还是GTP分区?
  1. @echo off

  2. :IsGPT
  3. rem 判定是否是GPT磁盘。
  4. echo list disk >yiwuyun.txt
  5. for /f "skip=8 tokens=3 delims=B" %%k in ('diskpart /s yiwuyun.txt') do (
  6.         set temp=%%k
  7.         if "!temp:~8,1!"=="*" goto gpt
  8. )
  9. set gpt=false
  10. echo Your disk is MBR disk!
  11. ping 127.0.0.1 -n 5 >nul 2>nul
  12. goto nogpt
  13. :gpt
  14. set gpt=true
  15. echo Your disk is GPT disk!
  16. ping 127.0.0.1 -n 5 >nul 2>nul
  17. :nogpt
  18. if exist yiwuyun.txt del yiwuyun.txt || exit /b 1
  19. rem echo errorlevel is !errorlevel!
  20. exit /b 0
复制代码
最好能与下面的bat代码,合并下。
bat显示硬盘及分区容量。
  1. @echo off
  2. del /q c:\diskinfo.* >nul 2>nul

  3. for /f "delims=:" %%i in ('findstr /n "^:DynamicScript$" "%~f0"') do (
  4.     more +%%i "%~f0" > c:\diskinfo.vbs
  5. )

  6. ping 127.0.0.1 -n 2 >nul 2>nul

  7. echo ——————————————————————————————————————— >nul 2>nul
  8. start c:\diskinfo.vbs
  9. ping 127.0.0.1 -n 5 >nul 2>nul

  10. cls
  11. type c:\diskinfo.txt

  12. ping 127.0.0.1 -n 15 >nul 2>nul & del /q c:\diskinfo.* & exit/b

  13. goto :eof



  14. echo ——————————————————————————————————————— >nul 2>nul
  15. :DynamicScript
  16. Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
  17. Set colDisks = objWMI.ExecQuery("select * from Win32_DiskDrive where MediaType like 'fixed%'")

  18. For Each objDisk in colDisks
  19.     i = i + 1
  20.     s = s & "硬盘" & i & ":" & vbTab
  21.     s = s & "大小:" & GetSize(objDisk.Size) & vbTab
  22.     s = s & "型号:" & objDisk.Caption & vbCrLf
  23.     strDiskID = Replace(objDisk.DeviceID, "", "\")

  24.     Set colPartitions = objWMI.ExecQuery _
  25.     ("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDiskID & """}" _
  26.     & " where AssocClass=Win32_DiskDriveToDiskPartition")

  27.     For Each objPartition in colPartitions
  28.         strPartId = objPartition.DeviceID

  29.         Set colLogicalDisks = objWMI.ExecQuery _
  30.         ("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & strPartId & """}  where AssocClass=Win32_LogicalDiskToPartition")

  31.         For Each objLogicalDisk in colLogicalDisks
  32.             size = objLogicalDisk.Size
  33.             free = objLogicalDisk.Freespace
  34.             used = FormatNumber((size - free) / size * 100, 2, true) & "%"
  35.             s = s & "分区" & objLogicalDisk.DeviceID & vbTab
  36.             s = s & "大小:" & GetSize(size) & vbTab
  37.             s = s & "剩余:" & GetSize(free) & vbTab
  38.             s = s & "使用率:" & used & vbCrLf
  39.         Next
  40.     Next
  41.     s = s & vbCrLf
  42. Next

  43. Set fso = CreateObject("Scripting.FileSystemObject")
  44. fso.OpenTextFile("c:\diskinfo.txt", 2, true).Write s

  45. Function GetSize(intSize)
  46.     If intSize/1024/1024 > 1024 Then
  47.         GetSize = FormatNumber(intSize/1024/1024/1024, 2, true) & "GB"
  48.     Else
  49.         Getize = FormatNumber(intSize/1024/1024, 2, true) & "MB"
  50.     End If
  51. End Function
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-1-2 09:29:14 | 显示全部楼层
其实原理是一样的,依次对每个硬盘号进行判定就可以了。如果用VBS,而不是纯批,在WINPE下可能行不通。只有纯批才能保证在WINPE下也能运行。
 楼主| 发表于 2015-1-2 10:14:35 | 显示全部楼层
回复 2# yiwuyun


    帮忙合并下1楼的2个代码?谢谢

最好合并成1个bat文件。谢谢
发表于 2015-1-2 12:51:06 | 显示全部楼层
第一个脚本不能达到功能吗?
第二个脚本是BAT+VBS混编。
 楼主| 发表于 2015-1-2 16:55:46 | 显示全部楼层
第一个脚本不能达到功能吗?
第二个脚本是BAT+VBS混编。
yu2n 发表于 2015-1-2 12:51




第一个bat 。
只能判断1个硬盘的gpt情况

如果有2个或者多个硬盘,如何判断每个硬盘是MBR还是GTP?
发表于 2015-1-2 18:49:38 | 显示全部楼层
试试这样合并:
  1. @echo off
  2. :IsGPT
  3. rem 判定是否是GPT磁盘。
  4. echo list disk >yiwuyun.txt
  5. for /f "skip=8 tokens=3 delims=B" %%k in ('diskpart /s yiwuyun.txt') do (
  6.         set temp=%%k
  7.         if "!temp:~8,1!"=="*" goto gpt
  8. )
  9. set gpt=false
  10. echo Your disk is MBR disk!
  11. ping 127.0.0.1 -n 5 >nul 2>nul
  12. goto nogpt
  13. :gpt
  14. set gpt=true
  15. echo Your disk is GPT disk!
  16. ping 127.0.0.1 -n 5 >nul 2>nul
  17. :nogpt
  18. del /f /q yiwuyun.txt

  19. del /q c:\diskinfo.* >nul 2>nul

  20. for /f "delims=:" %%i in ('findstr /n "^:DynamicScript$" "%~f0"') do (
  21.     more +%%i "%~f0" > c:\diskinfo.vbs
  22. )

  23. ping 127.0.0.1 -n 2 >nul 2>nul

  24. echo ——————————————————————————————————————— >nul 2>nul
  25. start c:\diskinfo.vbs
  26. ping 127.0.0.1 -n 5 >nul 2>nul

  27. cls
  28. type c:\diskinfo.txt

  29. ping 127.0.0.1 -n 15 >nul 2>nul & del /q c:\diskinfo.* & exit/b

  30. goto :eof



  31. echo ——————————————————————————————————————— >nul 2>nul
  32. :DynamicScript
  33. Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
  34. Set colDisks = objWMI.ExecQuery("select * from Win32_DiskDrive where MediaType like 'fixed%'")

  35. For Each objDisk in colDisks
  36.     i = i + 1
  37.     s = s & "硬盘" & i & ":" & vbTab
  38.     s = s & "大小:" & GetSize(objDisk.Size) & vbTab
  39.     s = s & "型号:" & objDisk.Caption & vbCrLf
  40.     strDiskID = Replace(objDisk.DeviceID, "", "\")

  41.     Set colPartitions = objWMI.ExecQuery _
  42.     ("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDiskID & """}" _
  43.     & " where AssocClass=Win32_DiskDriveToDiskPartition")

  44.     For Each objPartition in colPartitions
  45.         strPartId = objPartition.DeviceID

  46.         Set colLogicalDisks = objWMI.ExecQuery _
  47.         ("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & strPartId & """}  where AssocClass=Win32_LogicalDiskToPartition")

  48.         For Each objLogicalDisk in colLogicalDisks
  49.             size = objLogicalDisk.Size
  50.             free = objLogicalDisk.Freespace
  51.             used = FormatNumber((size - free) / size * 100, 2, true) & "%"
  52.             s = s & "分区" & objLogicalDisk.DeviceID & vbTab
  53.             s = s & "大小:" & GetSize(size) & vbTab
  54.             s = s & "剩余:" & GetSize(free) & vbTab
  55.             s = s & "使用率:" & used & vbCrLf
  56.         Next
  57.     Next
  58.     s = s & vbCrLf
  59. Next

  60. Set fso = CreateObject("Scripting.FileSystemObject")
  61. fso.OpenTextFile("c:\diskinfo.txt", 2, true).Write s

  62. Function GetSize(intSize)
  63.     If intSize/1024/1024 > 1024 Then
  64.         GetSize = FormatNumber(intSize/1024/1024/1024, 2, true) & "GB"
  65.     Else
  66.         Getize = FormatNumber(intSize/1024/1024, 2, true) & "MB"
  67.     End If
  68. End Function
复制代码
 楼主| 发表于 2015-1-2 19:38:32 | 显示全部楼层
试试这样合并:
DAIC 发表于 2015-1-2 18:49



    1楼的2个bat代码。

第一个bat 。只能判断1个硬盘的gpt情况

如果有2个或者多个硬盘,如何判断每个硬盘是MBR还是GTP?
 楼主| 发表于 2015-1-2 19:44:54 | 显示全部楼层
试试这样合并:
DAIC 发表于 2015-1-2 18:49



    rem 判定是否是GPT磁盘。
这个bat代码,只能判定1个硬盘的情况。

如果有2个或者多个,就不行了。
发表于 2015-1-2 20:03:03 | 显示全部楼层
回复 8# ygqiang


    先不管多个硬盘的事情,试试合并之后能否正常执行吧。
发表于 2015-1-2 20:18:21 | 显示全部楼层
回复 5# ygqiang

检查多个硬盘是不是GPT分区,我这里不方便测试,请自行测试:
  1. @echo off
  2. for /f "tokens=1,2,* delims= " %%a in ('echo list disk^|diskpart^|find /i "B"') do (
  3.   (echo,%%c|find /i "*" >nul 2>nul) && (
  4.      echo %%a %%b 是GPT分区
  5.   ) || (
  6.      echo %%a %%b 不是GPT分区
  7.   )
  8. )
  9. pause
复制代码
 楼主| 发表于 2015-1-2 20:41:16 | 显示全部楼层
回复  ygqiang


    先不管多个硬盘的事情,试试合并之后能否正常执行吧。
DAIC 发表于 2015-1-2 20:03



合并之后,能正常执行的。。
 楼主| 发表于 2015-1-2 20:45:29 | 显示全部楼层
回复  ygqiang

检查多个硬盘是不是GPT分区,我这里不方便测试,请自行测试:
yu2n 发表于 2015-1-2 20:18



   
多谢。这个测试过了。可以。

显示如下:
磁盘0  不是GPT分区  这个是系统盘  东芝ssd 64g
磁盘1  不是GPT分区  这个是数据盘  东芝1T
磁盘2  不是GPT分区  这个是u盘    16G
 楼主| 发表于 2015-1-2 20:47:08 | 显示全部楼层
回复  ygqiang

检查多个硬盘是不是GPT分区,我这里不方便测试,请自行测试:
yu2n 发表于 2015-1-2 20:18



    1楼的2个bat代码。

第2个bat 。测试结果如下:
发表于 2015-1-2 22:12:25 | 显示全部楼层
用查找方法是有缺陷的,因为GPT前面还有一项是DYN,如果DYN是*,就会出错,所以我当时用B作为分隔符,而不是空格。并且我测试过恰好是8个字符。用一个变量,很容易把我写的代码扩展到多个硬盘。每循环一次,变量增1,不跳出循环.我写这个代码是在WINPE下用的,所以全是纯批并且不用其他在WINPE下用不起的工具。
 楼主| 发表于 2015-1-2 22:35:31 | 显示全部楼层
用查找方法是有缺陷的,因为GPT前面还有一项是DYN,如果DYN是*,就会出错,所以我当时用B作为分隔 ...
yiwuyun 发表于 2015-1-2 22:12



    多谢。。。能否帮忙合并解决下1楼的2个bat代码?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 17:14 , Processed in 0.024826 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表