一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

BAT的一個定時關(guān)機腳本

 Chosefree 2021-11-02

– 寫這個腳本的目的主要是感覺Windows自帶的shutdown -s -t參數(shù)是秒,而對于大多數(shù)使用場景,我更需要的是在特定的時間自動關(guān)機,這就需要程序自動計算當(dāng)前時間和目標(biāo)時間的時間間隔,并轉(zhuǎn)換成秒。
– 當(dāng)然也有同學(xué)使用 at 命令在Windows自帶計劃任務(wù)庫中添加計劃任務(wù),但是這種方法需要請求管理員權(quán)限,雖然代碼簡單,輸入?yún)?shù)可以是24小時格式的時間,但是操作過程有點繁瑣,需要請求高權(quán)限,如果給別人使用時給用戶一種很不安全的感覺,個人還是希望使用shutdown命令還是較好的選擇,而且在設(shè)置成功后系統(tǒng)會提示關(guān)機計劃。
因此,我希望能夠編寫一個利用shutdown命令的自動關(guān)機程序,輸入?yún)?shù)是計劃關(guān)機的時間點,采用24小時格式輸入。


::定時關(guān)機腳本
::Author:Tony Chang 
::2016.10.18
::原創(chuàng)代碼,轉(zhuǎn)載請注明出處
@echo off
mode con lines=25
setlocal enabledelayedexpansion
title 定時關(guān)機
color 1f
cls
set "timeGoal= 21:15"

echo.
echo.
echo.
echo 時間使用24小時制(如2:15),默認(rèn)關(guān)機時間為:%timeGoal%
echo.
echo 取消已有關(guān)機計劃 按N;
echo.
echo.當(dāng)前時間 %time:~0,5%
echo.
echo ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
echo.

set /p "timeGoal= 請輸入關(guān)機時間:"
echo.
if %timeGoal%==N goto cancel
if %timeGoal%==n goto cancel

set tmp=%timeGoal%
::將"號替換成空格
set /a num = 0
set "tmp=%tmp:"= %"
:next
if not "%tmp:~0,1%"==":" (
 set /a num+=1
 set "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 將設(shè)置為明天%timeGoal%關(guān)機
set  /a "diffT = diffT + 24"
)
set  /a "diffT = diffT*3600+(minuteGoal-minuteNow)*60 - secNow"
if %diffT% lss 0 (
echo 將設(shè)置為明天%timeGoal%關(guān)機
set  /a "diffT = diffT + 86400"
)
shutdown -s -t %diffT%
echo 已設(shè)置%timeGoal%的關(guān)機計劃
goto exit

:cancel
shutdown -a
echo 已取消當(dāng)前設(shè)定
goto exit

:exit
echo.
echo 3秒后退出……
choice /t 3 /d y /n >nul 

代碼寫的簡單,因為不是很熟悉BAT的編程,一些變量的用法也有些亂,但是基本功能是實現(xiàn)。

  • 自定義關(guān)機時間;
  • 在無輸入的情況下,默認(rèn)關(guān)機時間。(有時候需要偷偷離開一下,又怕實驗室老板發(fā)現(xiàn),就需要在實驗室下班前保持電腦開啟,下班時自動關(guān)機,這個功能是專門為我這種懶人定制的~~~~;-));
  • 取消已有關(guān)機計劃;
  • 計劃設(shè)定結(jié)果顯示;

實現(xiàn)流程就是獲取目標(biāo)時間和當(dāng)前時間,求差,判斷是否是當(dāng)天任務(wù),將時間差轉(zhuǎn)換成秒后調(diào)用 shutdown命令。有一個小trick,在獲取輸入時間,會有不同長度的輸入,如2:15,15:40。為了解決這一問題,由于不是很熟悉BAT字符串操作,采取了比較笨的辦法,從頭遍歷字符串,直到找到:符號停止,記錄長度num。
代碼如下:

set tmp=%timeGoal%
::將"號替換成空格
set /a num = 0
set "tmp=%tmp:"= %"
:next
if not "%tmp:~0,1%"==":" (
 set /a num+=1
 set "tmp=%tmp:~1%"
 goto next
)

求得的參數(shù)在截取小時和分鐘時也有些不一樣的用法,使用了%和!來表示變量。
解釋:
如果使用行內(nèi)或括號內(nèi)定義或修改的變量,需要啟用延遲變量擴充,用嘆號引用變量。bat文件中用 setlocal enabledelayedexpansion 啟用延遲變量擴充,命令提示符窗口啟用延遲變量擴充

setlocal enabledelayedexpansion
set  /a hourGoal =!timeGoal:~0,%num%!
set /a num+=1
set  /a minuteGoal = !timeGoal:~%num%,2!

實現(xiàn)默認(rèn)輸入?yún)?shù)值:

set "timeGoal= 21:15"
set /p "timeGoal= 請輸入關(guān)機時間:"

運行結(jié)果圖

這里寫圖片描述

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产在线不卡中文字幕| 肥白女人日韩中文视频| 日韩欧美好看的剧情片免费| 国产精品一区二区视频大全| 又大又长又粗又猛国产精品| 国产精品久久女同磨豆腐| 国产亚洲精品久久99| 国产精品白丝久久av| 中国少妇精品偷拍视频| 99久久精品免费看国产高清| 中日韩免费一区二区三区| 91免费一区二区三区| 亚洲一区在线观看蜜桃| 欧美精品一区久久精品| 欧美亚洲美女资源国产| 亚洲精品中文字幕一二三| 人妻偷人精品一区二区三区不卡 | 91免费一区二区三区| 久久精品a毛片看国产成人| 日韩在线精品视频观看| 亚洲一区二区久久观看| 人妻乱近亲奸中文字幕| 免费观看日韩一级黄色大片| 国产av熟女一区二区三区四区 | 亚洲国产成人爱av在线播放下载| 国产偷拍精品在线视频| 中日韩美一级特黄大片| 亚洲综合香蕉在线视频| 日韩一区二区三区高清在| 丁香六月婷婷基地伊人| 国产福利一区二区三区四区| 91亚洲精品综合久久| 偷拍美女洗澡免费视频| 国内精品偷拍视频久久| 91亚洲精品综合久久| 久久国产成人精品国产成人亚洲| 国产性情片一区二区三区| 东北老熟妇全程露脸被内射| 亚洲国产精品久久琪琪| 偷拍偷窥女厕一区二区视频| 国产一区二区久久综合|