因工作需要,需要对硬盘通电时间,通电次数,总写入量和总读取量信息进行自动提取拦截。
因此特写如下代码,仅做笔记存稿和分享:
代码一:
@echo off
setlocal enabledelayedexpansion
if exist YPerror.ini (del YPerror.ini)
(for /f "tokens=* delims=, " %%a in ('dir/a/s/b .\Smart\*.ini') do (
set "p=%%~dpa" & for %%i in ("!p:~0,-1!") do (
for /f "tokens=2 delims==&" %%b in ('type "%%a" ^|findstr "PowerOnHours="^|more +1') do (if %%b GEQ 150 (echo %%~nxi 通电时间超时^(标准150小时^):%%b 小时 >>.\YPerror.ini))
for /f "tokens=2 delims=^=" %%b in ('type "%%a" ^|find "PowerOnCount="^|more +1') do (if %%b GEQ 100 (echo %%~nxi 通电次数超标^(标准100次^):%%b 次 >>.\YPerror.ini))
for /f "tokens=2 delims=^=" %%b in ('type "%%a" ^|find "HostWrites="^|more +1') do (if %%b GEQ 500 (echo %%~nxi 主机写入量总计超标^(标准500GB^):%%b GB >>.\YPerror.ini))
for /f "tokens=2 delims=^=" %%b in ('type "%%a" ^|find "HostReads="^|more +1') do (if %%b GEQ 500 (echo %%~nxi 主机读取量总计超标^(标准500GB^):%%b GB >>.\YPerror.ini))
)))
type yperror.ini
pause>nul
exit
如果不需要提示信息,可将最后2段代码删除:
type yperror.ini
pause>nul
这样就可以只获取超标数据,不会弹出提示。
代码另存为.cmd保存到"Smart"文件夹同级目录下即可,记得一定要用压缩包,不然获取不到数据。
代码二:
@echo off
set Names=PowerOnHours PowerOnCount HostWrites HostReads
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /s /a-d Smart\*.ini') do (
for %%k in ("%%~dpa.") do echo,%%~nk
set PowerOnHours=通电时间:
set PowerOnCount=通电次数:
set HostWrites=主机写入量总计:
set HostReads=主机读取量总计:
for /f "tokens=1,2 delims==" %%i in ('findstr "%Names%" "%%a"') do (
if defined %%i echo,!%%i!%%j
set %%i=
)
)
pause>nul
代码二另一个版本:
@echo off
set Names=PowerOnHours PowerOnCount HostWrites HostReads
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /s /a-d Smart\*.ini') do (
set "p=%%~dpa" & for %%i in ("!p:~0,-1!") do echo %%~nxi
set PowerOnHours=通电时间:
set PowerOnCount=通电次数:
set HostWrites=主机写入量总计:
set HostReads=主机读取量总计:
for /f "tokens=1,2 delims==" %%i in ('findstr "%Names%" "%%a"') do (
if defined %%i echo,!%%i!%%j
set %%i=
)
)
pause>nul
代码三:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=, " %%a in ('dir/a/s/b .\Smart\*.ini') do (
set "p=%%~dpa" & for %%i in ("!p:~0,-1!") do echo %%~nxi
for /f "tokens=2 delims=^=" %%b in ('type "%%a" ^|findstr "PowerOnHours=" ^|more +1') do (echo 通电时间:%%b)
for /f "tokens=2 delims=^=" %%b in ('type "%%a" ^|find "PowerOnCount=" ^|more +1') do (echo 通电次数:%%b)
for /f "tokens=2 delims=^=" %%b in ('type "%%a" ^|find "HostWrites=" ^|more +1') do (echo 主机写入量总计:%%b)
for /f "tokens=2 delims=^=" %%b in ('type "%%a" ^|find "HostReads=" ^|more +1') do (echo 主机读取量总计:%%b)
)
pause>nul