您可以使用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
命令附加的回車符。
要在for /F
內使用上述內置的wmic
命令行,需要轉義幾個特殊字符;這解釋了額外的^
符號。
也包括掛載點在wmic
命令的輸出,可以使用下面的命令行:
wmic VOLUME WHERE (DriveType=3 AND FileSystem^>"" AND SystemVolume=FALSE) GET Name
濾波器DriveType=3
僅包括本地磁盤驅動器;過濾器FileSystem>""
排除非格式化的項目;過濾器SystemVolume=FALSE
不包括系統保留的分區。
要解析for /F
的輸出,您需要像上面那樣通過^
轉義特殊字符。
嗨,感謝您的迴應 - 我可以看出,這對邏輯驅動器來說很有魅力,但是我的主要問題是mounpoints - 不幸的是Logicaldisk沒有提供這些信息 - 因此使用wmic volume命令。 有關如何適應這一點的任何想法? – Vanelder
查看我的[編輯](http://stackoverflow.com/revisions/32979578/2):我添加了一個'wmic VOLUME'命令行,所以掛載點現在也應該包含在內;請注意,現在像'D:'這樣的單個字母的驅動器現在被傳遞給具有尾部'\'的'vssadmin',所以'D:\',與傳遞'D:'的'wmic LOGICALDISK'變種相反。 .. – aschipfl
完美,謝謝! – Vanelder