Board logo

标题: [系统相关] [已解决]批处理如何获取指定盘符所在的硬盘信息 [打印本页]

作者: 小白龙    时间: 2023-8-27 12:22     标题: [已解决]批处理如何获取指定盘符所在的硬盘信息

我想获取D盘所在的磁盘信息, 用gpt写了下面的代码, 但是无效, 求路过大佬帮助, 多谢

因为我的电脑上有N块硬盘, 所以有时想用命令行查一下, 某个分区在哪个硬盘上, 想显示一下该硬盘的详细信息
  1. wmic logicaldisk where DeviceID="D:" get caption, description, providername, volumesname
复制代码

作者: Five66    时间: 2023-8-27 13:13

试试分开来,或者用powershel或其他方法
wmic logicaldisk where DeviceID="D:" get caption
wmic logicaldisk where DeviceID="D:" get description
wmic logicaldisk where DeviceID="D:" get providername
wmic logicaldisk where DeviceID="D:" get volumesname
作者: 小白龙    时间: 2023-8-27 13:35

回复 2# Five66


感谢大佬, 都显示无效的查询,
不想用powershell
作者: 小白龙    时间: 2023-8-27 13:37

回复 2# Five66


    我前面的描述有点笼统, 我是想获取分区所在的硬盘号, 因为我的硬盘是按主板上的接口的顺序插的
在磁盘管理里面, 第一个硬盘的硬盘号是 0 后面的类推+1
作者: 77七    时间: 2023-8-27 14:15

  1. @echo off
  2. rem http://www.bathome.net/redirect.php?goto=findpost&ptid=17241&pid=110200
  3. for /f tokens^=3delims^=^" %%a in ('wmic path Win32_LogicalDiskToPartition.Dependent^='Win32_LogicalDisk.DeviceID^="d:"' get Antecedent /value') do (
  4. for /f "tokens=2 delims=#," %%b in ("%%a") do (
  5. echo %%b
  6. )
  7. )
  8. pause
复制代码

作者: 小白龙    时间: 2023-8-27 18:12

本帖最后由 小白龙 于 2023-8-27 18:14 编辑

回复 5# 77七


  感谢大佬帮忙!

想继续请教, 如果不是通过盘符, 而是通过卷标来获取呢? 代码有些复杂看不太懂

估计可能是改下面, =号后面应该改成卷标, 那=前面改成什么呢, 例如: ????="soft"
DeviceID^="d:"
作者: 77七    时间: 2023-8-27 18:37

回复 6# 小白龙


   我不会修改,rem 后有原帖地址。
由卷标获取磁盘 参考
  1. http://www.bathome.net/redirect.php?goto=findpost&;ptid=59390&pid=242338
复制代码

作者: idwma    时间: 2023-8-27 19:39

试试先通过卷标得到盘符
作者: Five66    时间: 2023-8-27 20:32

本帖最后由 Five66 于 2023-8-27 20:38 编辑

大概是这样子吧,label是卷标
  1. set lb=label
  2. for /f "tokens=1" %%i in ('wmic logicaldisk get deviceid^,volumename^|findstr /i %lb%') do set "lb=%%i"
  3. for /f tokens^=2delims^=^" %%a in ('wmic path Win32_LogicalDiskToPartition^|findstr /i %lb%') do set "lb=%%a"
  4. for /f "tokens=2 delims=#," %%b in ("%lb%") do echo %%b
复制代码

作者: 小白龙    时间: 2023-8-27 21:08

回复 9# Five66


    感谢帮忙, 总感觉可以像5楼那样, 一行就可以查询出来, 查了一些资料, wmic也是一门查询语言
作者: Five66    时间: 2023-8-27 21:22

回复 10# 小白龙

Win32_LogicalDiskToPartition貌似只有
Antecedent
Dependent
EndingAddress
StartingAddress
这四个属性,好像没有跟卷标相关的
作者: idwma    时间: 2023-8-27 22:38

本帖最后由 idwma 于 2023-8-27 22:43 编辑

非要一行应该也可以
  1. wmic logicaldisk where "VolumeName='soft'" assoc:value /RESULTCLASS:Win32_DiskPartition
复制代码
官方的帮助参考一下
learn.microsoft.com/zh-cn/windows/win32/wmisdk/wmic#assoc
learn.microsoft.com/zh-cn/windows/win32/wmisdk/associators-of-statement
作者: 小白龙    时间: 2023-8-27 23:25

回复 12# idwma


    多谢大佬,
执行后出来很多行, 怎样只显示红色这行?


__PATH=\\WIN7\ROOT\CIMV2:Win32_LogicalDisk.DeviceID="C:"


__PATH=\\WIN7\ROOT\CIMV2:Win32_DiskPartition.DeviceID="Disk #0, Partition #1"
__NAMESPACE=ROOT\CIMV2
__SERVER=WIN7
__DERIVATION={"CIM_DiskPartition","CIM_StorageExtent","CIM_LogicalDevice","CIM_LogicalElement","CIM_ManagedSystemElement
"}
__PROPERTY_COUNT=34
__RELPATH=Win32_DiskPartition.DeviceID="Disk #0, Partition #1"
__DYNASTY=CIM_ManagedSystemElement
__SUPERCLASS=CIM_DiskPartition
__CLASS=Win32_DiskPartition
__GENUS=2
Access=
Availability=
BlockSize=512
Bootable=FALSE
BootPartition=FALSE
Caption=Disk #0, Partition #1
ConfigManagerErrorCode=
ConfigManagerUserConfig=
CreationClassName=Win32_DiskPartition
Description=GPT: Basic Data
DeviceID=Disk #0, Partition #1
DiskIndex=0
ErrorCleared=
ErrorDescription=
ErrorMethodology=
HiddenSectors=
Index=1
InstallDate=
LastErrorCode=
Name=Disk #0, Partition #1
NumberOfBlocks=167776256
PNPDeviceID=
PowerManagementCapabilities=
PowerManagementSupported=
PrimaryPartition=TRUE
Purpose=
RewritePartition=
Size=85901443072
StartingOffset=1077936128
Status=
StatusInfo=
SystemCreationClassName=Win32_ComputerSystem
SystemName=WIN7
Type=GPT: Basic Data
作者: Nsqs    时间: 2023-8-28 00:26

本帖最后由 Nsqs 于 2023-8-28 00:59 编辑

全部
  1. @echo off
  2. powershell -noprofile -executionpolicy bypass "gwmi Win32_LogicalDiskToPartition|select Antecedent,Dependent|%%{$x=$_.Dependent -replace '.+(?:=)|\"';\"$x, $($_.Antecedent -replace '(?:.+=)|\"')\"}"
  3. pause
复制代码
指定盘符
  1. @echo off
  2. powershell -noprofile -executionpolicy bypass "(gwmi Win32_LogicalDiskToPartition|?{$_.Dependent -match 'd:'}).Antecedent -replace '(?:.+=)|\"'"
  3. pause
复制代码

作者: Five66    时间: 2023-8-28 00:29

在12楼代码在后面加上findstr寻找就行了,连for都不用了
  1. wmic logicaldisk where "VolumeName='soft'" assoc:value /RESULTCLASS:Win32_DiskPartition |findstr /i "diskindex"
复制代码

作者: aloha20200628    时间: 2023-8-28 12:10


试试这个 for/f 一行流的结果...
  1. @echo off
  2. for /f tokens^=2^ delims^=^" %%2 in ('wmic logicaldisk where DeviceID^=^"d:^" assoc /assocclass:Win32_LogicalDiskToPartition') do set "v=%%2"
  3. echo,DeviceID = %v%
复制代码

作者: Batcher    时间: 2023-8-31 17:49

test-1.bat
  1. @echo off
  2. REM 设置待查看的盘符
  3. set "MyLetter=C:"
  4. 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 (
  5.     for /f "delims=" %%i in ("%%b") do (
  6.         if "%%a" equ "DiskIndex" (
  7.             set "LD2DI=%%i"
  8.         ) else if "%%a" equ "Index" (
  9.             set "LD2I=%%i"
  10.         )
  11.     )
  12. )
  13. echo Disk #%LD2DI%, Partition #%LD2I%
  14. pause
复制代码
test-2.bat
  1. @echo off
  2. REM 设置待查看的盘符
  3. set "MyLetter=C:"
  4. for /f "tokens=3 delims==" %%a in ('wmic path Win32_LogicalDiskToPartition.Dependent^="Win32_LogicalDisk.DeviceID='%MyLetter%'" get Antecedent /value') do (
  5.     set "DeviceID=%%a"
  6. )
  7. set "LD2Position=%DeviceID:~1,-3%"
  8. echo,%LD2Position%
  9. pause
复制代码
test-3.bat
  1. @echo off
  2. REM 查看系统盘符所在的硬盘和分区
  3. set "MyLetter=%SystemDrive%"
  4. for /f "tokens=3 delims==" %%a in ('wmic path Win32_LogicalDiskToPartition.Dependent^="Win32_LogicalDisk.DeviceID='%MyLetter%'" get Antecedent /value') do (
  5.     set "DeviceID=%%a"
  6. )
  7. set "LD2Position=%DeviceID:~1,-3%"
  8. echo,%LD2Position%
  9. pause
复制代码
test-4.bat
  1. @echo off
  2. REM 查看系统盘符所在的硬盘和分区
  3. for /f "tokens=2 delims==" %%i in ('wmic Partition where "BootPartition='true'" get DeviceID /value ^| find "="') do (
  4.     for %%j in ("%%i") do (
  5.         set "LD2Position=%%~j"
  6.     )
  7. )
  8. echo,%LD2Position%
  9. pause
复制代码





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