2017-03-24 120 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