我的驱动器C:的卷名是300GB WD3000HLFS-0
(包括'300GB'和'WD3000HLFS-0'之间的空格)
C:的卷序列号为1234-ABCD
(根据命令VOL
)
我没有成功使用此代码:
SET WMICcmd="WMIC logicaldisk WHERE VolumeSerialNumber='1234ABCD' get Caption^,VolumeName^,VolumeSerialNumber^"
FOR /F "tokens=1,2,3 skip=1" %%d IN (' %WMICcmd% ') DO (
ECHO '%%d' is the Drive with the VolumeName '%%e' and VolumeSerialNumber '%%f'
SET ODrive=%%d
)
除了其他参数外,如何在WMIC的帮助下以及Windows 7命令行批处理中的特定VolumeSerialNumber获取此VolumeName?
答案 0 :(得分:2)
您可以尝试CSV输出格式,一行包含所有以逗号分隔的属性
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "skip=2 tokens=2-4 delims=," %%a in (
'WMIC logicaldisk WHERE VolumeSerialNumber^="1234ABCD" get Caption^,VolumeName^,VolumeSerialNumber /format:csv'
) do (
ECHO '%%a' is the Drive with the VolumeName '%%b' and VolumeSerialNumber '%%c'
)
但是如果任何字段包含逗号,它将失败,因此,您可以使用列表格式。在这种情况下,wmic命令的输出对于每个请求的属性是一行,格式为property=value
。
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "tokens=1,* delims==" %%a in (
'WMIC logicaldisk WHERE VolumeSerialNumber^="1234ABCD" get Caption^,VolumeName^,VolumeSerialNumber /format:list'
) do (
if "%%a"=="Caption" ( set "caption=%%b"
) else if "%%a"=="VolumeName" ( set "volumeName=%%b"
) else if "%%a"=="VolumeSerialNumber" ( set "volumeSerialNumber=%%b"
)
)
ECHO '%caption%' is the Drive with the VolumeName '%volumeName%' and VolumeSerialNumber '%volumeSerialNumber%'
WMIC输出包括每个输出行末尾的附加回车符,此附加字符存储在指定的变量中。根据您的代码,它可能会干扰与否。如有必要,要删除所有需要的附加字符
for /f "delims=" %%a in ("%caption%") do set "caption=%%a"
这会将相同的值重新分配给变量但没有附加CR