返回列表 发帖

[系统相关] [已解决]bat命令,如何判断哪个磁盘,哪个分区,是当前win系统启动盘?

本帖最后由 ygqiang 于 2025-4-11 08:51 编辑

bat命令,如何判断哪个磁盘,哪个分区,是当前win系统启动盘?
win系统下,计算机管理,磁盘管理,这里显示的磁盘号。

[已解决]
代码如下:
@echo off & setlocal enabledelayedexpansion
echo 代码开始
:star
cls
echo.
echo.
echo ------------------当前系统-启动磁盘-启动分区------------------1111
for /f "delims=" %%a in (
  'powershell "gwmi -computername '.' -namespace 'root\cimv2' -class 'win32_logicaldisktopartition'|%%{$ld=$_.__RELPATH.substring($_.__RELPATH.length-5,2);if($ld -eq '%systemDrive%'){$_.__RELPATH -replace '.*disk #(\d+),.*', '$1'}}" '
) do echo,启动磁盘----磁盘%%a&echo,启动分区----%systemDrive%
echo,
echo ------------------当前系统-启动磁盘-启动分区------------------2222
for /l %%i in (0,1,25) do (
  for /f "tokens=3 delims= " %%a in (
    '(echo,select disk %%i ^&echo,detail disk^)^|diskpart^|findstr /rc:" 卷[ ]*[0-9]" '
  ) do if /i "%%a:"=="%SystemDrive%" echo,启动磁盘----磁盘%%i&echo,启动分区----%systemDrive%&goto[end])
:[end]
echo,&echo,
ping 0 -n 16 >nul 2>nul
goto :starCOPY

回复 1# ygqiang

参考此帖 8 楼》http://www.bathome.net/thread-70700-1-1.html

TOP

回复 2# aloha20200628


    多谢,最好用bat或者diskpart就能获取到。

TOP

顶。。。。

TOP

回复 1# ygqiang
@echo off &for /f "tokens=2 delims=#," %%x in (
   ' "wmic logicaldisk where DeviceID='%systemDrive%' assoc /assocclass:Win32_LogicalDiskToPartition" '
) do echo,系统启动盘符 %systemDrive% = 物理盘号 %%x
pause&exit/bCOPY

TOP

回复 5# aloha20200628


    谢谢,除了wmic命令,有没有别的方法?
win11系统,新版本都不内置wmic了

TOP

本帖最后由 aloha20200628 于 2025-4-10 20:11 编辑

回复 3# ygqiang

以下代码存为 test.bat 运行,须先获得管理员权限,在其新窗口中启运 diskpart.exe 析取系统启动盘符与所对应的物理盘号,首次启运 diskpart.exe 须等候当前所有外接驱动器热连接,其运行效率明显低于5楼和8楼代码...
@echo off
%~1 powershell "start -file '%~f0' -arg '::' -verb runas" &exit/b
for /l %%i in (0,1,25) do (
  for /f "tokens=3 delims= " %%a in (
    '(echo,select disk %%i ^&echo,detail disk^)^|diskpart^|findstr /rc:" 卷[ ]*[0-9]" '
  ) do if /i "%%a:"=="%SystemDrive%" echo,系统启动盘符 %systemDrive% = 物理盘号 %%i &goto[end])
:[end]
pause&exit/bCOPY

TOP

回复 6# ygqiang

再给一个 bat+powershell 版本(存为 test.bat 运行),不必获取管理员权限,也无须等候当前所有外接硬盘完成热连接,效率明显高于 diskpart 版...
@echo off &for /f "delims=" %%a in (
  'powershell "gwmi -computername '.' -namespace 'root\cimv2' -class 'win32_logicaldisktopartition'|%%{$ld=$_.__RELPATH.substring($_.__RELPATH.length-5,2);if($ld -eq '%systemDrive%'){$_.__RELPATH -replace '.*disk #(\d+),.*', '$1'}}" '
) do echo,系统启动盘符 %systemDrive% = 物理盘号 %%a
pause&exit/bCOPY

TOP

回复 1# ygqiang

再打磨一下8楼代码,句式还可更简洁,如下...
@echo off &for /f "delims=" %%a in (
   'powershell "gwmi win32_logicaldisktopartition|%%{$ld=$_.dependent.substring($_.dependent.length-3,2);if($ld -eq '%systemDrive%'){$_.antecedent -replace '.*Disk #(\d+).*', '$1'}}" ') do echo,系统启动盘符 %systemDrive% = 物理盘号 %%a
pause&exit/bCOPY

TOP

返回列表