如何使用wmic(cmd命令行)获取包含空格的多个参数?

时间:2014-08-24 12:52:33

标签: windows-7 cmd escaping wmic

我的驱动器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?

1 个答案:

答案 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