2017-03-24 70 views
1

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

此行提取HDD或SSD的上电时间价值。

大多数硬盘驱动器或SSD给我正确的小时,​​如:3423或什么。只是简单的价值。

不幸的是,一些金士顿固态硬盘具有以下值:197h +00米+ 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 

对不起,我的英语不好!

回答

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 

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

+0

不错的工作,谢谢!但是....我必须把这一行放到一个zabbix Userparameter中,输出如下所示:C:\ Windows \ system32> for/F“delims = h”%b in(“197h + 00m + 00.000s”)做@echo%b 197。可以抑制“c:\ windows ...”行的输出? – Daniel4711

+0

我只需要197 – Daniel4711

+0

只是用'@'来压制命令重复;看我的编辑。 – Stephan

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作为分隔符,因为没有在该行无其他小写小时。所以

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

应该输出:

197 
+1

这是我的第一个想法,但因为我不知道,输出会是什么样子......我个人会使用'find'Power_On_Hours“'而不是'findstr/BC:”9“ - 只是为了可读性。 – Stephan