你不應該刪除所有空格,如一些答案建議,因爲有些計算機在值的中間有空格。見List of WMIC CSProduct Get Name Results。
我不僅得到了多個尾隨空格,還收到了一個尾隨的回車符(<CR>
),它是將WMIC的unicode輸出自動轉換爲ASCII的工件。
尾隨的<CR>
可以通過將值通過另一個FOR/F循環來移除。這也刪除了幻影「空白」行(實際上是<CR>
),所以不再需要IF語句。
可以使用~nx
修飾符刪除尾部空格。這是有效的,因爲文件名不能以空格或點結束,並且被操作系統自動刪除。修飾符通過去除尾隨點和空格來標準化「文件名」。如果值包含\
,/
,*
或?
,或者如果它以字母開頭並且後跟:
,則這將無法正常工作。
for /F "skip=1 delims=" %%A in (
'wmic csproduct get name'
) do for /f "delims=" %%B in ("%%A") do set "model=%%~nxB"
另一種選擇是使用CSV格式的WMZ的建議,但我還是要刪除尾隨<CR>
。
for /F "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name /format:csv'
) do for /f "delims=" %%B in ("%%A") do set "model=%%B"
編輯 - 爲什麼WMZ解決可能出現的工作,不剝<CR>
的<CR>
問題可能並不明顯,這取決於它的設置後,你如何訪問model
變量。正常擴展將剝離任何<CR>
,但延遲擴展保留它。
@echo off
setlocal enableDelayedExpansion
for /f "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name /format:csv'
) do set "model=%%A"
echo Normal expansion strips ^<CR^>: [%model%]
echo Delayed expansion preserves ^<CR^>: [!model!]
---輸出---
Normal expansion strips <CR>: [LX4710-01]
] Delayed expansion preserves <CR>: [LX4710-01
編輯 - 另一種方式來避免<CR>
問題
您可以使用CSV格式,並要求出現一個額外的屬性在你想要的價值之後。當您解析出所需的令牌時,<CR>
將與額外值一起被丟棄。
for /f "skip=2 tokens=2 delims=," %%A in (
'wmic csproduct get name^,vendor /format:csv'
) do set "model=%%A"
對於_normal_變量,正確的語法是'set a =%a:=%',刪除前導'%%'。對於參數代替不起作用 – jeb 2013-02-14 13:36:29
@jeb感謝您的擡頭,您可以編輯我的答案;) – 2013-02-14 13:57:13
有些計算機在值的中間有空格,所以這不是一個好的選擇。 – dbenham 2013-02-15 03:51:01