0

我正在尝试通过批处理文件获取计算机系统模型类型。为此,我创建了这个脚本:

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

知道如何解决吗?

4

3 回答 3

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 /?了解更多信息。

(根据模糊按钮答案下的 OP 评论更新)

于 2013-04-12T14:06:22.227 回答
1

你可以使用

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

意思是使用分隔符 COLON 或 SPACE,使文本 token3 但与文本一样?包括冒号或空格,表示“标记 2 %%a %%b*之后的分隔符之后的行的其余部分” the first-mentioned token (2) is the one that gets assigned to, the next highest (*) to

现在你也可以编码

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 进度文本。

打破这条线是非常合理的——只需要小心你在哪里做它。使代码更具可读性。

于 2013-04-12T14:21:14.977 回答
0

对于它的价值,我尝试了这个,它把所有的双空格都替换为空
echo =%SYSMODEL%=产生:(
=my sysmodel =只有一个尾随空格):)

set SYSMODEL=%SYSMODEL: =%

编辑
因此,使用 Peter 的极好建议将管道命令放入 中FOR /F,我之前尝试过,但使用普通|而不是^|:)

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

EDIT 2
rojo 的回答很棒,但它仍然给我留下了尾随空间,所以我最终还是使用了这个%var: =%技巧

for /f "tokens=2 delims==" %%a in ('wmic computersystem get model /format:list') do set SYSMODEL=%%a
set SYSMODEL=%SYSMODEL:  =%
echo =%SYSMODEL%=
于 2013-04-12T14:20:00.707 回答