您可以使用它for /F
来解析命令的输出,例如wmic
命令行。
首先,我们需要组装一个合适的wmic
命令:
wmic LOGICALDISK WHERE (DriveType=3 AND Size^>0) GET Name /VALUE
让我们使用LOGICALDISK
而不是VOLUME
,因为后者也返回没有驱动器号和系统保留分区的项目。
过滤DriveType=3
器仅包括本地磁盘驱动器;过滤器Size>0
排除非格式化项目(>
必须像^>
在命令行中一样进行转义,因为>
具有特殊含义——重定向)。开关告诉返回像
./VALUE
wmic
Name=C:
然后,我们环绕正确的for /F
命令(另请参阅for /?
帮助):
for /F "tokens=2 delims==" %%V in ('
wmic LOGICALDISK WHERE ^(DriveType^=3 AND Size^^^>0^) ^
GET Name /VALUE
') do for /F "delims=" %%L in ("%%V") do (
echo.%%L
rem Here you may add your `vssadmin` command lines:
vssadmin create shadow /for=%%L >> C:\temp\vssoutput.txt
::
vssadmin delete shadows /for=%%L
)
实际上有两个嵌套for /F
循环:外部一个解析wmic
命令行的输出并枚举所有找到的驱动器;内部的每个驱动器只重复一次,旨在删除命令可能附加的回车符wmic
。
要在 中使用上面构建的wmic
命令行for /F
,需要转义几个特殊字符;这解释了附加^
符号。
要在命令的输出中还包含挂载点wmic
,您可以使用以下命令行:
wmic VOLUME WHERE (DriveType=3 AND FileSystem^>"" AND SystemVolume=FALSE) GET Name
过滤DriveType=3
器仅包括本地磁盘驱动器;过滤器FileSystem>""
排除非格式化项目;过滤器SystemVolume=FALSE
排除系统保留的分区。
要使用 解析输出for /F
,您需要^
像上面那样转义特殊字符。