如何通过一行格式化的五个命令输出感兴趣的输出值?

时间:2018-04-05 08:33:28

标签: batch-file cmd

实验室中有50台计算机,每台计算机有两个磁盘和两个内存芯片。 每天我需要检查所有100个磁盘和内存芯片都没有被盗。 我计划通过两个步骤实现这一目标:

步骤1:编写一个记录磁盘数和内存芯片数的批处理文件。

我用以下脚本制作了它:

@echo off
echo >.\hardWareinfo.txt
(date/t & ipconfig & wmic cpu get name & wmic memorychip get capacity & wmic diskdrive get caption,size)>>.\hardWareinfo.txt
pause

它会生成一个包含以下内容的文本文件:

2018/04/05  
Windows IP Configuration
Ethernet Adaptor:

  DNS. . . . . . . : 

  IPV6 Address. . . . . . . . : fd80::aec3:fbdc:c5ae:119f%21

  IPV4 Address. . . . . . . . : 192.168.1.100

  Subnet Mask. . . . . . . . . . . . : 255.255.255.0

  Default Gateway. . . . . . . . . . . . :192.168.1.1


N a m e                                                                           I n t e l ( R )   C o r e ( T M )   i 5 - 7 4 0 0   C P U   @   3 . 0 0 G H z     

 C a p a c i t y         

 4 2 9 4 9 6 7 2 9 6     

 C a p t i o n                                                                 S i z e                       

 W D C   W D 1 0 E Z E X - 7 5 W N 4 A 0   S C S I   D i s k   D e v i c e     1 0 0 0 2 0 2 2 7 3 2 8 0     

第2步:将消息缩短为以下内容:

{Date:2018/04/05,hostIP:192.168.1.100,CPU:Intel i5-7400,memorySize: 4294967296,diskSize:1000202273280}

如何使用批处理文件完成此步骤?

1 个答案:

答案 0 :(得分:1)

我不会使用(临时)文件,只需在内存中完成 将命令的输出变为变量的“通常”方式是for /f循环 使用find和适当的标记和分隔符进行Togheter,您可以非常精确地选择合适的子字符串。

我将它扩展了一点,以便使用多个网络适配器,Dimms和Disks。

@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('date /t') do set "_dat=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set "_ip=!_ip!+%%a"
for /f "tokens=2 delims==" %%a in ('wmic cpu get name /value^|find "="') do set "_cpu=%%a"
for /f "tokens=2 delims==" %%a in ('wmic memorychip get capacity /value^|find "="') do set "_mem=!_mem!+%%a"
for /f "tokens=2 delims==" %%a in ('wmic diskdrive get caption^,size /value^|find "="') do set "_drv=!_drv!+%%a"
echo {Date:%_dat%,HostIP:%_ip:~1%,CPU:%_cpu%,MemSize:%_mem:~1%,DiskSize:%_drv:~1%}