系统的系统信息 - 获取通过CMD计算机系统模型 - 额外的空间臭虫(SystemInfo - Ge

2019-08-22 07:48发布

我试图让通过批处理文件的计算机系统模型类型。 为了这个,我已经创造了这个脚本:

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

任何想法如何解决呢?

Answer 1:

你这样做了艰辛的道路。 使用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 /? 获取更多信息。

(下模糊巴顿的回答每个操作的评论更新)



Answer 2:

你可以使用

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

这意味着使用分隔符结肠或空间,使得文本token3但随着文本可能? 包括结肠或空间中, *意味着“以下令牌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

这意味着你不需要TEMPSYSINFO.txt文件。 该执行单引号的命令行-特殊字符>| 需要插入符号( ^ ),以“逃离”他们为FOR而言(关闭其特殊含义),只要(他们属于quoted command ,而不是FOR)。

2> NUL将打压SYSTEMINFO进度文本。

这是相当合理的打破了这一行 - 只是恰恰是你这样做要小心。 使代码更具有可读性。



Answer 3:

对于它的价值,我想这和它取代所有的双空格什么,
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:  =%

编辑2
罗霍的答案是伟大的,但它仍然留下了我尾随的空间,所以我最终还是使用%var: =%绝招

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


文章来源: SystemInfo - Get computer System Model via CMD - Extra spaces bug