2013-08-29 50 views
0

我有一個完美的腳本。批處理腳本 - 查找操作系統版本信息 - 變量輸出

if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit 

systeminfo | find "OS Name" > osname.txt 

FOR /F "usebackq delims=: tokens=2" %%i IN (osname.txt) DO set vers=%%i 

echo %vers% | find "Windows 7" > nul 

if %ERRORLEVEL% == 0 goto VERSION_7 

然而,當我嘗試打印,像這樣的結果:

Echo Current OS:%vers% - 64 Bit 

它打印出一個真正的結果!長期的差距。像這樣:

Current OS:     Microsoft Windows 7 Enterprise - 64 Bit 

有誰知道爲什麼?或者我如何消除這個巨大的差距?

非常感謝!

+1

http://www.dostips.com/DtTipsStringManipulation.php#Snippets.TrimLeftFOR – LittleBobbyTables

+0

謝謝,似乎改變:到Delims經過%的空間%似乎已經奏效。 – level42

回答

0

改變

FOR /F "usebackq delims=: tokens=2" %%i IN (osname.txt) DO set vers=%%i 

FOR /F "usebackq delims= tokens=2" %%i IN (osname.txt) DO set vers=%%i 

*改變:以delims經過%的空間%...

1

我知道你的劇本 「的作品完美」,但不效率很高。

SYSTEMINFO需要很多時間,osname.txt可能會被避免。

檢查:

FOR /F "TOKENS=1,* DELIMS==" %%u IN ('WMIC OS GET CAPTION /VALUE') DO IF /I "%%u"=="Caption" SET vers=%%v 
+0

...哇!你先生太棒了! – level42

+0

更重要的是,'systeminfo'輸出是本地化的,包括「OS名稱」標籤本身被翻譯替換(因此'findstr「OS名稱」'在非英文Windows中不起作用)。另一方面,'wmic'的輸出不是本地化的,所以你可以按照他們想要的方式'findstr' :-) –