Board logo

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

作者: ygqiang    时间: 2024-5-24 09:30     标题: [已解决]批处理,如何显示系统启动方式(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
复制代码

作者: ygqiang    时间: 2024-5-24 09:37

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

备用备用。。。
作者: ygqiang    时间: 2024-5-24 10:02

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

msinfo32 /report a.txt
这个命令运行后,txt文件里可以显示系统引导方式。
BIOS 模式        UEFI
作者: newswan    时间: 2024-5-24 21:10

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

作者: ShowCode    时间: 2024-5-24 22:30

回复 1# ygqiang


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

作者: ygqiang    时间: 2024-5-25 06:49

本帖最后由 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
复制代码

作者: newswan    时间: 2024-5-25 10:28

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

磁盘0 物理盘?
一楼的代码 磁盘C,是逻辑盘
作者: Batcher    时间: 2024-5-25 10:36

回复 6# ygqiang


http://bbs.bathome.net/thread-33606-2-1.html#pid160255
这个代码跟你最新的需求有什么差异吗
作者: ygqiang    时间: 2024-5-25 15:22

回复 8# Batcher


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

win11系统下,实际情况是:
磁盘0,容量1T,MBR
磁盘1,容量512G,GPT
作者: ygqiang    时间: 2024-5-25 15:23

回复 7# newswan


对啊,都是物理盘。

diskpart   list disk,显示的结果。

磁盘0
磁盘1
磁盘2
...
作者: newswan    时间: 2024-5-25 15:40

批处理,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
复制代码

作者: ygqiang    时间: 2024-5-25 23:40

回复 11# newswan

显示结果,是否可以规整一些?谢谢
作者: newswan    时间: 2024-5-26 07:30

  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. )
复制代码

作者: ygqiang    时间: 2024-5-26 15:07

  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
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2