2013-04-12 16 views
0

我試圖通過批處理文件獲得計算機系統模型類型。 爲了這個,我已經創造了這個腳本:SystemInfo - 通過CMD獲取計算機系統模型 - 額外空間bug

systeminfo | find "System Model" > %temp%\TEMPSYSINFO.txt 
for /F "tokens=2 delims=:" %%a in (%temp%\TEMPSYSINFO.txt) do set SYSMODEL=%%a 
del %temp%\TEMPSYSINFO.txt 
set SYSMODEL=%SYSMODEL:~1% 
echo %SYSMODEL% >%temp%\SYSMODEL.txt 
del %temp%\SYSMODEL.txt 
set "Line1=*** System Model: %SYSMODEL%" 
echo %Line1% 

但是當我運行它,我得到額外的空格:

*** System Model:    OptiPlex 9010 

任何想法,我該如何解決?

+0

歡迎來到S.O. Eliran!由於您在此處是新手,因此查看[此帖](http://meta.stackexchange.com/a/5235/187716)可能並不是一個好主意,因爲如何將答案標記爲已接受。 – rojo

回答

4

你這樣做很難。使用wmic。颳得更快,更簡單。

for /f "tokens=2 delims==" %%I in ('wmic computersystem get model /format:list') do set "SYSMODEL=%%I" 
set "Line1=*** System Model: %SYSMODEL%" 
echo %Line1% 

wmic,您可以查詢各種整齊WMI垃圾。 wmic /?欲瞭解更多信息。

+0

非常感謝rojo!很棒! –

0

(每個操作人根據模糊巴頓的回答評論更新)對於它的價值,我想這和它取代所有的雙空格沒什麼,
echo =%SYSMODEL%=生產:
=my sysmodel =(只有一個空格) :)

set SYSMODEL=%SYSMODEL: =%

編輯
所以,全光照摹彼得的指教把管道命令進入FOR /F,這是我之前試過但遭遇了挫折,而不是一個簡單的|^| :)

for /F "tokens=2 delims=:" %%a in ('systeminfo 2^>nul ^| find "System Model"') do set SYSMODEL=%%a 
set SYSMODEL=%SYSMODEL: =% 

EDIT 2
羅霍的答案是偉大的,但它仍然留下了我尾隨的空間,所以我最終還是使用%var: =%

for /f "tokens=2 delims==" %%a in ('wmic computersystem get model /format:list') do set SYSMODEL=%%a 
set SYSMODEL=%SYSMODEL: =% 
echo =%SYSMODEL%= 
+0

謝謝模糊!我發現「wmic computersystem get model」的速度要快得多,但現在我需要弄清楚如何將模型字符串與此命令一起設置爲「Line1 = *** System Model:%SYSMODEL%」 –

+0

@EliranCohen - I更新了我的答案,以解決此問題。 – rojo

1

你可以使用

for /F "tokens=2* delims=: " %%a in (%temp%\TEMPSYSINFO.txt) do set SYSMODEL=%%b 

含義使用分隔符COLON或SPACE,使文本token3 BUT作爲文本可能?包括結腸或空間,則*手段「以下後令牌2 the first-mentioned token (2) is the one that gets assigned to %%一個, the next highest (*) to %% B`

現在你也可以代碼

for /F "tokens=2* delims=: " %%a in (
'systeminfo 2^>nul ^| find "System Model" ' 
) do set SYSMODEL=%%b 

這意味着你不定界符的行的其餘部分」 t需要TEMPSYSINFO.txt文件。這將執行單引號的命令行 - 特殊字符>|需要一個插入符號(^)以「逃避」它們(關閉它們的特殊含義),就FOR而言(它們屬於quoted command而不是FOR )

2> nul將壓制SYSTEMINFO進度文本。

打破這條路線是非常合理的 - 只需要小心,準確的位置就可以了。使代碼更具可讀性。