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”
——只是为了可读性。