[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] [已解决]批处理,如何显示系统启动方式(bios或uefi)和硬盘格式(mbr或gpt)?

本帖最后由 ygqiang 于 2024-5-25 07:17 编辑

[已解决]批处理,如何显示当前系统启动方式(bios或uefi)和多个硬盘格式(mbr或gpt)?
下面的代码,基本满足要求。主要问题是不能显示多个硬盘格式。
  1. @fltmc>nul||mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~dpnx0","%*",,"runas",1)(window.close)&&exit
  2. @echo off
  3. cd /d "%~dp0"
  4. cls
  5. bcdedit /enum {current} | find /i "winload.efi" && cls && (
  6. echo --------当前引导方式:UEFI
  7. ) || (
  8. echo --------当前引导方式:Legacy
  9. )
  10. @echo off
  11. REM 设置待查看的盘符
  12. set "MyLetter=c:"
  13. for /f "tokens=1-2 delims==" %%a in ('wmic LogicalDisk where "DeviceID='%MyLetter%'" assoc:value /resultclass:Win32_DiskPartition ^| findstr /b /c:"DiskIndex=" /c:"Index="') do (
  14.     for /f "delims=" %%i in ("%%b") do (
  15.         if "%%a" equ "DiskIndex" (
  16.             set "LD2DI=%%i"
  17.         ) else if "%%a" equ "Index" (
  18.             set "LD2I=%%i"
  19.         )
  20.     )
  21. )
  22. for /f "delims=" %%i in ('wmic Partition where "DiskIndex='%LD2DI%' and Index='%LD2I%'" get type /value ^| find "="') do (
  23.     echo,%%i | find "GPT" >nul
  24.     if errorlevel 1 (
  25.         echo ------------硬盘格式::MBR
  26.     ) else (
  27.         echo ------------硬盘格式::GPT
  28.     )
  29. )
  30. 1pause >nul 2>nul
  31. ping 0 -n 4 >nul 2>nul
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 ygqiang 于 2024-5-24 12:32 编辑

备用备用。。。

TOP

本帖最后由 ygqiang 于 2024-5-24 10:13 编辑

msinfo32 /report a.txt
这个命令运行后,txt文件里可以显示系统引导方式。
BIOS 模式        UEFI
1

评分人数

TOP

powersehll
  1. ( get-disk ).PartitionStyle
  2. $env:Firmware_Type
复制代码
1

评分人数

TOP

回复 1# ygqiang


V1.bat
  1. @echo off
  2. powershell –NoProfile –ExecutionPolicy Bypass "$env:Firmware_Type; (Get-Disk).PartitionStyle"
  3. pause
复制代码
1

评分人数

测试代码之前请做好备份

TOP

本帖最后由 ygqiang 于 2024-5-25 07:36 编辑

回复 5# ShowCode


    多谢。磁盘信息能否显示:
哪个硬盘?多大容量?什么格式(mbr或gpt)?
跟磁盘管理里面显示的一致,比如磁盘0、磁盘1

举例如下:
磁盘0,容量1T,MBR
磁盘1,容量512G,GPT

1楼代码,win7系统和win11系统均测试通过。

下面代码,win11系统测试通过,win7 64系统下测试不行,运行提示错误。
  1. @echo off
  2. echo ------------当前引导方式:
  3. powershell –NoProfile –ExecutionPolicy Bypass "$env:Firmware_Type"
  4. echo.
  5. echo.
  6. echo ------------硬盘格式:
  7. powershell –NoProfile –ExecutionPolicy Bypass "Get-Disk"
  8. pause >nul
  9. exit
复制代码

TOP

举例如下:
磁盘0,容量1T,MBR
磁盘1,容量512G,GPT

磁盘0 物理盘?
一楼的代码 磁盘C,是逻辑盘

TOP

回复 6# ygqiang


http://bbs.bathome.net/thread-33606-2-1.html#pid160255
这个代码跟你最新的需求有什么差异吗
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8# Batcher


    硬盘-格式及分区检测DynamicScript-修正版,这个代码,测试结果全是GPT格式。

win11系统下,实际情况是:
磁盘0,容量1T,MBR
磁盘1,容量512G,GPT

TOP

回复 7# newswan


对啊,都是物理盘。

diskpart   list disk,显示的结果。

磁盘0
磁盘1
磁盘2
...

TOP

批处理,wmic 的话
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /f "usebackq tokens=1,2 delims==" %%a in (` "wmic DISKDRIVE get Index,size /value"`) do (
  4. if "%%a" == "Index" (
  5. call set _Disk_ID_=%%b
  6. for /f "usebackq tokens=1,2 delims==" %%c in (` "wmic partition where DiskIndex=!_Disk_ID_! get Type /value"`) do (
  7. if "%%c" == "Type" (
  8. for /f "tokens=1 delims=:" %%e in ( "%%d" ) do (
  9. if "%%e" == "GPT" (set _Disk_!_Disk_ID_!_Type_=%%e) else (set _Disk_!_Disk_ID_!_Type_=MBR)
  10. )
  11. )
  12. )
  13. )
  14. if "%%a" == "Size" (
  15. call set _Disk_!_Disk_ID_!_Size_=%%b
  16. )
  17. )
  18. set _
  19. pause
  20. exit/b
复制代码

TOP

回复 11# newswan

显示结果,是否可以规整一些?谢谢

TOP

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /f "usebackq tokens=1,2 delims==" %%a in (` "wmic DISKDRIVE get Index,size /value"`) do (
  4. if "%%a" == "Index" (
  5. call set _Disk_List_=!_Disk_List_! %%b
  6. call set _Disk_ID_=%%b
  7. for /f "usebackq tokens=1,2 delims==" %%c in (` "wmic partition where DiskIndex=!_Disk_ID_! get Type /value"`) do (
  8. if "%%c" == "Type" (
  9. for /f "tokens=1 delims=:" %%e in ( "%%d" ) do (
  10. if "%%e" == "GPT" (set _Disk_!_Disk_ID_!_Type_=%%e) else (set _Disk_!_Disk_ID_!_Type_=MBR)
  11. )
  12. )
  13. )
  14. )
  15. if "%%a" == "Size" (
  16. call set _Disk_!_Disk_ID_!_Size_=%%b
  17. )
  18. )
  19. for %%a in (%_Disk_List_%) do (
  20. echo diskID:%%a  Type:!_Disk_%%a_Type_!  Size:!_Disk_%%a_Size_!
  21. )
复制代码

TOP

  1. @fltmc>nul||mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~dpnx0","%*",,"runas",1)(window.close)&&exit
  2. @echo off
  3. cd /d "%~dp0"
  4. cls
  5. bcdedit /enum {current} | find /i "winload.efi" && cls && echo. && echo. && (
  6. echo --------当前引导方式:UEFI
  7. ) || (
  8. echo --------当前引导方式:Legacy bios
  9. )
  10. @echo off
  11. echo.
  12. for /f "tokens=1,2,* delims= " %%a in ('echo list disk^|diskpart^|find /i "B"') do (
  13.   (echo,%%c|find /i "*" >nul 2>nul) && echo. && (
  14.      echo %%a %%b 格式::GPT
  15.   ) || (
  16.      echo %%a %%b 格式::mbr
  17.   )
  18. )
  19. pause >nul
复制代码

TOP

返回列表