减少 Findstr 输出

Reduce Findstr Output

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

此行正在从 HDD 或 SSD 中提取开机时间值。

大多数 HDD 或 SSD 都会给我正确的时间,例如:3423 或其他时间。只是简单的值。

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

是否可以将输出减少到 197?

也许用另一个 findstr 管道?

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

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

抱歉我的英语不好!!

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

(未验证,因为我没有此实用程序)

看起来 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