我试图让通过批处理文件的计算机系统模型类型。 为了这个,我已经创造了这个脚本:
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 /?
获取更多信息。
(下模糊巴顿的回答每个操作的评论更新)
你可以使用
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进度文本。
这是相当合理的打破了这一行 - 只是恰恰是你这样做要小心。 使代码更具有可读性。
对于它的价值,我想这和它取代所有的双空格什么,
与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%=