Batch file SystemInfo-通过CMD获取计算机系统模型-额外空间错误

Batch file SystemInfo-通过CMD获取计算机系统模型-额外空间错误,batch-file,space,extra,sysinfo,Batch File,Space,Extra,Sysinfo,我正在尝试通过批处理文件获取计算机系统模型类型。 为此,我创建了以下脚本: 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% &g

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

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

知道我该怎么修吗?

你做得很辛苦。使用
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/?了解更多信息


(根据Fuzzy Button的回答更新了OP的评论)

你做得很艰难。使用
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/?了解更多信息


(根据操作人员在Fuzzy Button的回答下的评论进行更新)

为了它的价值,我尝试了这个,它将所有双空格替换为零,
使用
echo=%SYSMODEL%=
生成:
=my sysmodel=
(只有一个尾随空格):)

set SYSMODEL=%SYSMODEL:=%

编辑
因此,使用Peter的优秀建议,将管道命令放入/F的
中,我以前尝试过,但没有成功,而是使用了一个简单的
,而不是
^
:)

编辑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%=

为了它的价值,我尝试了这个,它将所有双空格替换为零,
使用
echo=%SYSMODEL%=
生成:
=my sysmodel=
(只有一个尾随空格):)

set SYSMODEL=%SYSMODEL:=%

编辑
因此,使用Peter的优秀建议,将管道命令放入/F的
中,我以前尝试过,但没有成功,而是使用了一个简单的
,而不是
^
:)

编辑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%=
你可以用

for /F "tokens=2* delims=: " %%a in (%temp%\TEMPSYSINFO.txt) do set SYSMODEL=%%b
意思是使用分隔符冒号或空格,使文本标记为3,但作为文本可能?包括冒号或空格,
*
表示“标记2

第一个提到的标记(2)是分配给
%%a
的标记,其次是分配给
%%b的最高标记(*)`

现在您也可以编写代码了

for /F "tokens=2* delims=: " %%a in (
 'systeminfo 2^>nul ^| find "System Model" '
 ) do set SYSMODEL=%%b
这意味着您不需要tempsynfo.txt文件。这将执行单引号命令行-就FOR而言,特殊字符
|
需要插入符号(
^
)来“转义”(关闭其特殊含义)(它们属于
引号命令
,而不是FOR)

2>nul将禁止显示SYSTEMINFO进度文本

打破这条线是很合理的——只是在你做这件事的地方要小心。使代码更具可读性。

您可以使用

for /F "tokens=2* delims=: " %%a in (%temp%\TEMPSYSINFO.txt) do set SYSMODEL=%%b
意思是使用分隔符冒号或空格,使文本标记为3,但作为文本可能?包括冒号或空格,
*
表示“标记2

第一个提到的标记(2)是分配给
%%a
的标记,其次是分配给
%%b的最高标记(*)`

现在您也可以编写代码了

for /F "tokens=2* delims=: " %%a in (
 'systeminfo 2^>nul ^| find "System Model" '
 ) do set SYSMODEL=%%b
这意味着您不需要tempsynfo.txt文件。这将执行单引号命令行-就FOR而言,特殊字符
|
需要插入符号(
^
)来“转义”(关闭其特殊含义)(它们属于
引号命令
,而不是FOR)

2>nul将禁止显示SYSTEMINFO进度文本


打破这条线是很合理的——只是在你做这件事的地方要小心。使代码更具可读性。

欢迎来到S.O.Eliran!既然你是新来的,那么看看如何将答案标记为已接受可能不是一个坏主意。欢迎来到S.O.Eliran!因为你是新来的,所以检查一下如何将答案标记为已接受可能不是一个坏主意。谢谢!我发现“wmic computersystem get model”的速度要快得多,但现在我需要弄清楚如何将带有此命令的模型字符串放入set“Line1=***系统模型:%SYSMODEL%”中@eliankohen-我更新了我的答案以满足您的请求。谢谢!我发现“wmic computersystem get model”的速度要快得多,但现在我需要弄清楚如何将带有此命令的模型字符串放入set“Line1=***系统模型:%SYSMODEL%”中@eliankohen-我更新了我的答案以满足您的请求。