全部代码完成,这么个小东西还真挺不好弄。就显示这些东西:
再看看批处理内容:
echo "正在查询,请稍候……"
cls
@echo off
::提取systeminfo保存为systeminfo.txt文件
systeminfo > d:\systeminfo.txt
::导出1000条系统日志存为d:\log.txt文件
wevtutil qe system /c:1000 /rd:true /f:text > d:\log.txt
::在d:\log.txt文件中提取含有Power-Troubleshooter的行保存在d:\aaa.txt文件内。
findstr /n "Power-Troubleshooter" d:\log.txt > d:\aaa.txt
::提取d:\aaa.txt文件第一行并更新到d:\aaa.txt( 即最后一次休眠唤醒时间)
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ( 'findstr /n .* "d:\aaa.txt"' ) do (
set /a m+= 1& if ! m!= = 1 ( echo %%j> d:\bbb.txt))
::提取行数
for /f "tokens=1,2 delims=:" %%i in ( d:\bbb.txt) do set var= %%i
::显示内容"初始安装日期" 和“系统启动时间”
type d:\systeminfo.txt | findstr /B "初始安装日期" && type d:\systeminfo.txt | findstr /B "系统启动"
::显示休眠唤醒时间
for /f "skip=%var% delims=" %%a in ( d:\log.txt) do (
set date1= %%~a
goto :Result
)
:Result
for /f "tokens=1,2 delims= " %%i in ( "%date1%" ) do ( set time0= %%j goto :wake_time
)
:wake_time
set wtime_y= %time0:~0,4%
set wtime_m= %time0:~5,2%
set wtime_d= %time0:~8,2%
set wtime_h= %time0:~11,8%
echo 系统唤醒时间: %wtime_y%/%wtime_m%/%wtime_d%, %wtime_h%
::计算及显示电脑使用时间
::1获取启动电脑时间赋值给btime,以供计算使用。
type d:\systeminfo.txt | findstr /B "系统启动" > d:\ddd.txt
for /f "tokens=1,* delims= " %%i in ( d:\ddd.txt) do set btime= %%j
for /f "tokens=1,2,3,4,5,6 delims=/:, " %%i in ( "%btime%" ) do ( set btime_y= %%i & ^
set btime_m= %%j & ^
set btime_d= %%k & ^
set btime_h= %%l & ^
set btime_mi= %%m)
set /a btime_all= %btime_y%*365*24*60+^
%btime_m%*30*24*60+^
%btime_d%*24*60+^
%btime_h%*60+%btime_m%
::计算唤醒总时间。
for /f "tokens=1,2 delims=:" %%i in ( "%wtime_h%" ) do ( set wtime_hh= %%i & ^
set wtime_hm= %%j)
set /a wtime_all= %wtime_y%*365*24*60+^
%wtime_m%*30*24*60+^
%wtime_d%*24*60+^
%wtime_hh%*60+%wtime_hm%
::当前时间总时间。
set ntime_y= %date:~0,4%
set ntime_m= %date:~5,2%
set ntime_d= %date:~8,2%
set ntime_h= %time:~0,2%
set ntime_mi= %time:~3,2%
set /a ntime_all= %ntime_y%*365*24*60+^
%ntime_m%*30*24*60+^
%ntime_d%*24*60+^
%ntime_h%*60+%ntime_mi%
::时间差计算
set /a b_wtime= %btime_all%-%wtime_all%
set /a n_wtime= %ntime_all%-%wtime_all%
set /a n_btime= %ntime_all%-%btime_all%
echo ------------------------------
if %b_wtime% LEQ 0 ( echo 电脑使用时间为:%n_wtime%分钟。) else ( echo 电脑使用时间为:%n_btime%分钟。)
echo ------------------------------
::删除临时文件。
del d:\aaa.txt
del d:\bbb.txt
del d:\log.txt
del d:\systeminfo.txt
del d:\ddd.txt
if %n_btime% GTR 10000 ( echo 你的电脑距离上次重启已经7天了,建议重启一次电脑!!!!)
pause
echo on
居然也写了90多行(当然也有分行写的),原来的只显示时间有39行,就为了得到最后这个使用电脑时间,居然用了50行,当然我的DOS也不是很灵光,很多代码估计可以优化,如果有看到不妥之处请指正。也希望大家讨论。这么个小东西花了我将近2天时间,不过也正常,我连|| &&LEQ GTR 都不知道,一点点研究,也算可以了,东西虽小,成就感还是有的。