Windows 7 如何使用wmic(cmd命令行)获取多个参数,包括空格?

Windows 7 如何使用wmic(cmd命令行)获取多个参数,包括空格?,windows-7,cmd,escaping,wmic,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 (

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

您可以尝试使用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