批處理獲取系統安裝時間/系統開機時間/電腦喚醒時間及開機使用時間(二)完成

全部代碼完成,這麼個小東西還真挺不好弄。就顯示這些東西:

在這裏插入圖片描述

再看看批處理內容:
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 都不知道,一點點研究,也算可以了,東西雖小,成就感還是有的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章