我正在寻找一种更干净的方式来做这件事。我非常确定这是错误的,即使它有点工作。基本上,我从一个文件(temp.txt)中获取如下输出:
Host Name: IBM-3J93A46MRS5
OS Name: Microsoft Windows 7 Professional
OS Version: 6.1.7631 Service Pack 1 Build 7601
OS Configuration: Standalone Workstation
Registered Owner: IAMADMIN
Original Install Date: 2011-12-15, 10:56:07 AM
System Boot Time: 2013-05-27, 9:55:36 AM
System Manufacturer: DELL
System Model: 4009BF7
Time Zone: (UTC-05:00) Eastern Time (US & Canada)
Total Physical Memory: 16,316 MB
Available Physical Memory: 11,356 MB
并尝试将第二列数据转换为变量。取决于我是否想要它。我正在使用Findstr来清除。
@echo off
setlocal enabledelayedexpansion
systeminfo > temp.txt
set "tmp_result_file=temp.txt"
for /f "tokens=3-7 delims= " %%i in ('FINDSTR /C:"OS Name:" %tmp_result_file%') do set "OSNAME=%%i %%j %%k %%l"
for /f "tokens=3-10 delims= " %%i in ('FINDSTR /V /C:"BIOS Version:" %tmp_result_file%^|FIND /I "OS Version:"') do set "OSVER=%%i %%j %%k %%l %%m %%n %%o %%p"
for /f "tokens=4-7 delims= " %%i in ('FINDSTR /C:"Original Install Date:" %tmp_result_file%') do set "INSTDATE=%%i %%j %%k %%l"
for /f "tokens=3-7 delims= " %%i in ('FINDSTR /C:"System Manufacturer:" %tmp_result_file%') do set "SYSMFG=%%i %%j %%k %%l"
for /f "tokens=3-7 delims= " %%i in ('FINDSTR /C:"System Model:" %tmp_result_file%') do set "SYSMDL=%%i %%j %%k %%l"
echo.
echo Operating System : %OSNAME% , %OSVER%
echo Original Install Date : %INSTDATE%
echo Model Information : %SYSMFG% %SYSMDL%
我不喜欢我如此精确地使用标记,我只需要搜索值之后的所有内容。
发布于 2013-06-27 03:46:50
不需要延迟扩展、临时文件或FINDSTR,当然也不需要计算以空格分隔的标记。您只需设置正确的DELIMS和令牌选项。第一个FOR /F处理systeminfo
的输出,并将每一行解析为名称和值。第二个/F从每个值中去掉了前导空格。剩下的就是一系列IF语句,用于测试每个名称并根据需要设置所需的变量。
@echo off
setlocal
for /f "delims=: tokens=1*" %%A in ('systeminfo') do (
for /f "tokens=*" %%S in ("%%B") do (
if "%%A"=="OS Name" set "OSNAME=%%S"
if "%%A"=="OS Version" set "OSVER=%%S"
if "%%A"=="Original Install Date" set "INSTDATE=%%S"
if "%%A"=="System Manufacturer" set "SYSMFG=%%S"
if "%%A"=="System Model" set "SYSMDL=%%S"
)
)
echo(
echo Operating System : %OSNAME%, %OSVER%
echo Original Install Date : %INSTDATE%
echo Model Information : %SYSMFG% %SYSMDL%
如果想要捕获更多的值,可能需要使用字符串指定搜索字符串:变量名对,并添加一些额外的FOR循环来处理每个测试,如下所示:
@echo off
setlocal
for /f "delims=: tokens=1*" %%A in ('systeminfo') do for %%S in (
"OS Name:OSNAME"
"OS Version:OSVER"
"Original Install Date:INSTDATE"
"System Manufacturer:SYSMFG"
"System Model:SYSMDL"
) do for /f "delims=: tokens=1*" %%a in ("%%~S") do if %%A==%%a (
for /f "tokens=*" %%s in ("%%B") do set "%%b=%%s"
)
echo(
echo Operating System : %OSNAME%, %OSVER%
echo Original Install Date : %INSTDATE%
echo Model Information : %SYSMFG% %SYSMDL%
发布于 2013-06-27 02:27:19
如果需要获取第三个令牌之后的所有内容,只需在令牌值中使用通配符,如下所示:-
for /f "tokens=3* delims= " %%i in ('FINDSTR /C:"OS Name:" %tmp_result_file%') do set "OSNAME=%%i"
应显示
Microsoft Windows 7 Professional
https://stackoverflow.com/questions/17327512
复制相似问题