我想减少以下行的输出:
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
抱歉我的英语不好!!
答案 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