减少Findstr输出

时间:2017-03-24 13:55:28

标签: batch-file cmd findstr

我想减少以下行的输出: for /F "tokens=10" %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" ') do @echo %a

此行正在从HDD或SSD中提取Power-On-Hours值。

大多数硬盘驱动器或固态硬盘给我正确的时间,如:3423或其他什么。只是简单的价值。

不幸的是,一些金士顿固态硬盘具有以下价值:197h + 00m + 00.000s

是否可以将输出降低到197?

可能还有另一个findtr管道?

命令必须在同一行(!)中: 这不起作用,但我希望它能解释我的意思。

for /F "tokens=10" %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr  /BC:"  9" | findstr [0-9][0-9]?[0-9]?[0-9]?[0-9]?') do @echo %a

抱歉我的英语不好!!

2 个答案:

答案 0 :(得分:0)

findstr可以找到包含某个字符串的行,但它无法修改该行。

您可以添加另一个for来执行您想要的操作:

@for /F "tokens=10" %a in ('@c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr  /BC:"  9" ')  do @for /f "delims=h" %b in ("%a") do @echo %b

(未经证实,因为我没有这个实用程序)

答案 1 :(得分:0)

看起来Zabbix并不喜欢第二个堆叠的。由于典型(缩短)的smartctl输出如下所示:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   120   099   ---    Pre-fail  Always       -       235885189
  3 Spin_Up_Time            0x0023   098   097   ---    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   ---    Old_age   Always       -       442
  5 Reallocated_Sector_Ct   0x0033   100   100   ---    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002f   085   060   ---    Pre-fail  Always       -       347745957
  9 Power_On_Hours          0x0032   075   075   ---    Old_age   Always       -       197h+00m+00.000s

您可以更改第一个for /f以包含字母h作为分隔符,因为该行上没有其他小写字母h。所以

for /F "tokens=10delims=h " %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr  /BC:"  9" ') do echo %a

应输出:

197