我有一个 USB 驱动器,其字母/路径可能不同,但其名称永远不会改变。我想通过查找其名称来找到此驱动器的路径/字母。是否有 cmd 命令可以帮我完成此操作?我搜索了好一会儿,但找不到好的解决方案。

现在我有:

wmic path CIM_LogicalDevice where "Name like 'driveName'" get name

这向我证实了特定的驱动器确实已插入,但我现在该如何找到它的字母呢?

编辑1:

我发现可以使用这个 PowerShell 命令来完成:

Get-WMIObject Win32_Volume | ? { $_.Label -eq 'driveName' }

但就我而言,我不能使用 PowerShell……

编辑2:

好吧,刚刚发现我可以像这样通过 cmd 运行 powershell 命令:

powershell -command "Get-WMIObject Win32_Volume | ? { $_.Label -eq 'driveName' }"


最佳答案
3

在 cmd 中运行 powershell 命令,如下所示:

powershell -command "Get-WMIObject Win32_Volume | ? { $_.Label -eq 'driveName' }"

是的,我正在回答我自己的问题。

4

  • 1
    回答自己的问题完全没问题,甚至值得鼓励。没有理由不这样做。很高兴你找到了答案。


    – 

  • 请查看如果您的声誉超过 15,请两天后再回来检查是否已回答。


    – 

  • 1
    不确定是不是我的问题,但在 cmd 中我什么都没得到 ^^(给出了驱动器的所有信息,你需要字母(路径)吗?)。但是,powershell -command “(Get-Volume | Where-Object { $_.FileSystemLabel -eq ‘Win7Boot’ }).DriveLetter + ‘:\'” 可以 😉


    – 


  • 嗯,对我来说,它提供了很多信息,其中包括:…“标题:D:\”…“驱动器号:D:”。但您的命令更好,因为我不必添加函数来拆分和搜索输出字符串:D 谢谢 🙂


    – 


您需要循环遍历您的驱动器;

-一行cmd;

对于 /f "tokens=2 delims==" %D 在 ('wmic volume where "Label='Win7Boot'" get DriveLetter /value') 中启动 %D:\

-另存为 bat 文件

@echo 关闭
设置“usbName=Win7Boot”

对于/f“tokens = 2 delims ==” %% D在('wmic卷,其中“Label ='%usbName%'”获取DriveLetter /value')中执行(
    启动资源管理器 %%D:\
    退出/b

echo 未找到带有标签“%usbName%”的 USB 驱动器。
暂停

-来自 cmd 的 PowerShell

powershell -command "(Get-Volume | Where-Object { $_.FileSystemLabel -eq 'Win7Boot' }).DriveLetter + ':\'"

1

  • 谢谢,我试过了,成功了!不过在 cmd 中使用 [powershell – command “”] 更简单!


    – 


  • 使用单个循环的替代方法可能是:
@echo off

set "_VolumeName=BOOTDISK" && for /f usebackq^ ^Tokens^=^4^ ^Delims^=^<^> %%i in (` 
     wmic LogicalDisk where "DriveType=2 and VolumeName='%%_VolumeName%%'" get DeviceID^,VolumeSerialNumber /format:xml ^| find "VALUE"
    `) do echo/"%%~i"| >nul find ":" && set "_DeviceID=%%~i" || set "_VolumeSerialNumber=%%~i"

set _ | findstr "_Dev _Vol""
  • 输出:
_DeviceID=D:
_VolumeName=BOOTDISK
_VolumeSerialNumber=9ED49E6A

  • 处理这个问题的另一种方法是使用单个循环,如下所示:
@echo off

set "_VolumeName=BOOTDISK"

%:^?
if not defined _Caption =;( set "_get=Get Caption" );= else if not defined _DeviceID =;( set "_get=Get DeviceID"
    );= else if not defined _VolumeSerialNumber =;( set "_get=Get VolumeSerialNumber" );= else set "_get=" && goto %:^!

for /f usebackq^ ^Tokens^=^4^ ^Delims^=^<^> %%i in =;(`
     call wmic LogicalDisk where "DriveType=2 and VolumeName='%%_VolumeName%%'" %%_get%% /format:xml ^| find "VALUE" 
    `);= do set "%_get:* =_%=%%~i" & goto %:^?

%:^!
echo/1st for loop output: 
for %%G in =;( 
     Caption,DeviceID,VolumeName,VolumeSerialNumber 
    );= do call echo/%%~G=%%_%%~G%%

echo/
echo/2nd for loop output: 
for /f tokens^=^1*^ ^ delims^=^= %%i in =;( 
    'set _ ^| findstr "Capti Devi Volume"'
    );= do echo/VariableName %%~i == %%~j

这样,您就可以一次性获取更详细的信息,例如DriveID、、和其他有用的属性。通过使用(可移动驱动器)进行过滤并检查VolumeName您可以轻松定位您感兴趣的特定USB 驱动器,一次性获取所有关键详细信息。VolumeSerialNumberDriveType=2VolumeName='BOOTDISK'

  • 输出:
1st for loop output:
Caption=D:
DeviceID=D:
VolumeName=BOOTDISK
VolumeSerialNumber=9ED49E6A

2nd for loop output:
VariableName _Caption == D:
VariableName _DeviceID == D:
VariableName _VolumeName == BOOTDISK
VariableName _VolumeSerialNumber == 9ED49E6A

  

  • “我有一个USB 驱动器,其字母/路径可能不同,但其名称从未改变”。
  • 卷名将始终保持不变,并且由于这是USB 设备,驱动器类型将始终为2。因此,我建议使用as 条件来获取相关的输出/值。
wmic LogicalDisk where "DriveType=2 and VolumeName='BOOTDISK'" get driveID

   
   
 与该逻辑磁盘代表的磁盘驱动器类型相对应的数值
      

姓名 价值 描述
未知 0 驱动器类型未知。
无根目录 1 该驱动器没有根目录。
可拆卸的 2 驱动器是可移动存储设备,例如 USB 闪存驱动器。
固定的 3 该驱动器是一个固定磁盘。
网络 4 该驱动器是网络驱动器。
光驱 5 驱动器是光盘设备,例如 CD 或 DVD-ROM。
内存 6 该驱动器是一个 RAM 磁盘。

 


其他资源:

  • |<>2>, ETC。

2

  • 很棒的信息,感谢您花时间!


    – 

  • 1
    感谢您的评论,但请注意,这只是有空闲时间的结果。d:)


    –