我有一个 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 驱动器,一次性获取所有关键详细信息。VolumeSerialNumber
DriveType=2
VolumeName='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:)
–
|
|