Batch file 减少Findstr输出

Batch file 减少Findstr输出,batch-file,cmd,findstr,Batch File,Cmd,Findstr,我想减少以下行的输出: for/F“tokens=10”%a in('c:\program\smartmontools\bin\smartctl.exe-a/dev/hdb^ findstr/BC:“9”)do@echo%a 该行正在从HDD或SSD提取开机时间值 大多数HDD或SSD给我的时间都是正确的,比如:3423或什么的。只是简单的值 不幸的是,一些金斯敦SSD具有以下值:197h+00m+00.000s 有可能把产量减少到197吗 也许用另一根findstr管子 该命令必须在同一行(!

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

该行正在从HDD或SSD提取开机时间值

大多数HDD或SSD给我的时间都是正确的,比如:3423或什么的。只是简单的值

不幸的是,一些金斯敦SSD具有以下值: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 /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

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

findstr
可以找到包含特定字符串的行,但无法修改该行

您可以为
添加另一个
,以执行所需操作:

@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
您可以更改/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

看起来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
您可以更改/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

干得好,谢谢!但是我必须将这一行放入zabbix Userparameter中,输出如下所示:C:\Windows\system32>for/F“delims=h”%b in(“197h+00m+00.000s”)do@echo%b 197。可以抑制“c:\windows…”行的输出吗?我只需要197Perfect!斯蒂芬得12分!:)干得好,谢谢!但是我必须将这一行放入zabbix Userparameter中,输出如下所示:C:\Windows\system32>for/F“delims=h”%b in(“197h+00m+00.000s”)do@echo%b 197。可以抑制“c:\windows…”行的输出吗?我只需要197Perfect!斯蒂芬得12分!:)这是我的第一个想法,但我不知道输出会是什么样子。。。我个人会使用
find“Power\u On\u Hours”
而不是
findstr/BC:“9”
——只是为了可读性。这是我的第一个想法,但我不知道输出会是什么样子。。。我个人会使用
find“开机时间”
而不是
findstr/BC:“9”
——只是为了可读性。