BAT的一个定时关机脚本
– 寫這個腳本的目的主要是感覺Windows自帶的shutdown -s -t參數是秒,而對于大多數使用場景,我更需要的是在特定的時間自動關機,這就需要程序自動計算當前時間和目標時間的時間間隔,并轉換成秒。
– 當然也有同學使用 at 命令在Windows自帶計劃任務庫中添加計劃任務,但是這種方法需要請求管理員權限,雖然代碼簡單,輸入參數可以是24小時格式的時間,但是操作過程有點繁瑣,需要請求高權限,如果給別人使用時給用戶一種很不安全的感覺,個人還是希望使用shutdown命令還是較好的選擇,而且在設置成功后系統會提示關機計劃。
因此,我希望能夠編寫一個利用shutdown命令的自動關機程序,輸入參數是計劃關機的時間點,采用24小時格式輸入。
::定時關機腳本 ::Author:Tony Chang ::2016.10.18 ::原創代碼,轉載請注明出處 @echo off mode con lines=25 setlocal enabledelayedexpansion title 定時關機 color 1f cls set "timeGoal= 21:15"echo. echo. echo. echo 時間使用24小時制(如2:15),默認關機時間為:%timeGoal% echo. echo 取消已有關機計劃 按N; echo. echo.當前時間 %time:~0,5% echo. echo ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ echo.set /p "timeGoal= 請輸入關機時間:" echo. if %timeGoal%==N goto cancel if %timeGoal%==n goto cancelset tmp=%timeGoal% ::將"號替換成空格 set /a num = 0 set "tmp=%tmp:"= %" :next if not "%tmp:~0,1%"==":" (set /a num+=1set "tmp=%tmp:~1%"goto next ) set /a hourNow = %time:~0,2% set /a minuteNow = %time:~3,2% set /a secNow = %time:~6,2% set /a hourGoal =!timeGoal:~0,%num%! set /a num+=1 set /a minuteGoal = !timeGoal:~%num%,2! set /a "diffT = hourGoal - hourNow"::diffT<0; if %diffT% lss 0 ( echo 將設置為明天%timeGoal%關機 set /a "diffT = diffT + 24" ) set /a "diffT = diffT*3600+(minuteGoal-minuteNow)*60 - secNow" if %diffT% lss 0 ( echo 將設置為明天%timeGoal%關機 set /a "diffT = diffT + 86400" ) shutdown -s -t %diffT% echo 已設置%timeGoal%的關機計劃 goto exit:cancel shutdown -a echo 已取消當前設定 goto exit:exit echo. echo 3秒后退出…… choice /t 3 /d y /n >nul
代碼寫的簡單,因為不是很熟悉BAT的編程,一些變量的用法也有些亂,但是基本功能是實現。
- 自定義關機時間;
- 在無輸入的情況下,默認關機時間。(有時候需要偷偷離開一下,又怕實驗室老板發現,就需要在實驗室下班前保持電腦開啟,下班時自動關機,這個功能是專門為我這種懶人定制的~~~~;-));
- 取消已有關機計劃;
- 計劃設定結果顯示;
實現流程就是獲取目標時間和當前時間,求差,判斷是否是當天任務,將時間差轉換成秒后調用 shutdown命令。有一個小trick,在獲取輸入時間,會有不同長度的輸入,如2:15,15:40。為了解決這一問題,由于不是很熟悉BAT字符串操作,采取了比較笨的辦法,從頭遍歷字符串,直到找到:符號停止,記錄長度num。
代碼如下:
求得的參數在截取小時和分鐘時也有些不一樣的用法,使用了%和!來表示變量。
解釋:
如果使用行內或括號內定義或修改的變量,需要啟用延遲變量擴充,用嘆號引用變量。bat文件中用 setlocal enabledelayedexpansion 啟用延遲變量擴充,命令提示符窗口啟用延遲變量擴充
實現默認輸入參數值:
set "timeGoal= 21:15" set /p "timeGoal= 請輸入關機時間:"運行結果圖
總結
以上是生活随笔為你收集整理的BAT的一个定时关机脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: INDEX函数
- 下一篇: Spring简介与IOC容器