你所看到的問題的出現WMIC輸出是unicode的事實。通過一些我不完全瞭解的機制(一個bug?),FOR/F命令將unicode命令輸出轉換爲ASCII,但在每行的末尾附加了一個額外的回車(<CR>
)。
FOR/F不會返回空行,但神祕且看似空白的行不是真的空白 - 它們包含一個<CR>
。
即使多餘的行被正確忽略,列表中的最後一個值也會包含一個不需要的<CR>
,該值在將值分配給環境變量時將包含在內。如果以後使用%VAR%
正常擴展變量,則<CR>
將不明顯,因爲命令解析器會自動刪除所有<CR>
字符。但是<CR>
被保留,並且如果使用延遲擴展!VAR!
會導致問題。
FOR/F命令剝離每行的最後一個字符,如果它恰好是<CR>
。因此,通過額外的FOR/F傳遞值可以消除這個問題。 David Ruhman建議使用/value
開關是一個不錯的選擇,並且可以改進。可以在一個循環中請求多個值,並且可以使用屬性名稱作爲變量名稱。每行只有一個名稱/值對,可以消除空格和/或逗號分隔問題。
WMIC命令中的逗號必須在FOR/F中使用時轉義或引用。在這種情況下,引用整個命令似乎是最簡單的。以下將正確定義兩個環境變量 - 域名和名稱:
for /f "delims=" %%A in ('"wmic computersystem get domain, name /value"') do (
for /f "tokens=1* delims==" %%B in ("%%A") do set "%%B=%%C"
)
echo Your host name is %name% and your domain is %domain%
問題不在於把輸出放在變量中,問題是'wmic'不能按預期工作。它有一些額外的'CR'在行尾,不知道,究竟有多少(1-3?)。 – Endoro
我知道,這是3行。一個在上面,一個在下面。但我現在通過避免wmic來解決它。 – MokiTa