網站首頁 編程語言 正文
本文主要介紹使用 at 和 schtasks 兩個命令實現常見任務計劃的增刪查改等操作。其中 at 命令功能比較單一,可以設置的任務計劃的屬性較少,多用于 XP 等老系統;相比之下 schtasks 的功能較為豐富,Win7 / Win10 等系統建議使用 schtasks 命令管理任務計劃。
對于 Windows 系統管理員來說,經常遇到的操作可能包括:
進程
服務
注冊表
任務計劃
防火墻
網絡
用戶和組
共享
FTP
一方面,初學批處理腳本的朋友們往往習慣于通過goto等死循環的方式實現每隔XX時間執行一次某命令,這樣的方式只適合練習一下語法或者在自己電腦上做個小試驗。如果要放在公司的服務器上,是不太合適的,因為這種死循環的方式太浪費系統資源。推薦的方式是把腳本放在任務計劃里面定期執行。
另一方面,某些惡意腳本也喜歡創建任務計劃定時執行惡意操作,某些討厭的軟件也經常通過任務計劃定期更新版本或彈窗等。熟練掌握相關命令行的操作,也有助于解決此類問題。
1. at 命令
1.1 at 命令基本語法
at [\\computername] [ [id] [/delete] | /delete [/yes]]
at [\\computername] time [/interactive] [ /every:date[,...] | /next:date[,...]] "command"
常用參數列表:
\\computername | 指定遠程計算機。如果省略這個參數,會計劃在本地計算機上運行命令。 |
id | 指定給已計劃命令的識別號。 |
/delete | 刪除某個已計劃的命令。如果省略 id,計算機上所有已計劃的命令都會被刪除。 |
/yes | 不需要進一步確認時,跟刪除所有作業的命令一起使用。 |
time | 指定運行命令的時間。(24小時計時法00:00到23:59) |
/interactive | 允許作業在運行時,與當時登錄的用戶桌面進行交互。 |
/every:date[,...] | 指定在每周(m,t,w,th,f,s,su分別代表周一到周日)或每月的特定日期(1到31)運行命令。如果省略日期,則默認為在每月的本日運行。 |
/next:date[,...] | 指定在下一個指定日期(如,下周四)運行命令。如果省略日期,則默認為在每月的本日運行。 |
"command" | 準備運行的命令或批處理程序。 |
1.2 at 創建任務計劃
# 今天下午2:30自動關機
at 14:30 shutdown /s /f /t 0
# 每天晚上11點自動關機
at 23:00 /every:m,t,w,th,f,s,su shutdown /s /f /t 0
# 每周一到周五早上9點執行腳本 C:\Test Backup.bat
at 09:00 /every:m,t,w,th,f cmd /c "C:\Test Backup.bat"
例如 C:\Test Backup.bat 腳本內容是:
@echo off
if not exist "E:\Log\" (
md "E:\Log"
)
copy /y "C:\Windows\WindowsUpdate.log" "E:\Log\"
1.3 查看 at 創建了哪些任務計劃
直接執行 at 命令不帶任何參數即可。
C:\>at
狀態 ID 日期 時間 命令行
-------------------------------------------------------------------------------
1 今天 14:30 shutdown /s /f /t 0
2 每月執行日期:... 23:00 shutdown /s /f /t 0
3 每月執行日期:... 9:00 cmd /c "C:\Test Backup.bat"
1.4 刪除ID為2的 at 任務計劃
at 2 /delete /yes
1.5 刪除所有的 at 任務計劃
at /delete /yes
1.6 獲得 SYSTEM 權限的命令行窗口
XP 系統有個小技巧,可以用 at 命令獲取一個系統權限的命令行窗口,通常可以使用這個方法結束某些惡意進程、刪除某些頑固文件等。假如現在的時間為16:46,運行下面的命令,會在一分鐘后打開一個 SYSTEM 權限的命令行窗口。
at 16:47 /interactive %ComSpec%
2. schtasks 命令
2.1 schtasks 命令基本語法
schtasks /create | 創建新任務計劃 |
schtasks /delete | 刪除任務計劃 |
schtasks /query | 顯示所有任務計劃 |
schtasks /change | 更改任務計劃屬性 |
schtasks /run | 按需運行任務計劃 |
schtasks /end | 中止當前正在運行的任務計劃 |
schtasks /showsid | 顯示與計劃的任務名稱相應的安全標識符 |
2.2 schtasks 創建任務計劃
schtasks /create 命令的主要參數:
/tn | 指定任務的名稱。 |
/tr | 指定任務運行的程序或命令。 |
/sc | 指定計劃類型。有效值為 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。 |
/mo | 指定任務在其計劃類型內的運行頻率。這個參數對于 MONTHLY 計劃是必需的。對于 MINUTE、HOURLY、DAILY 或 WEEKLY 計劃,這個參數有效,但也可選。默認值為 1。 |
/d | 指定周或月的一天。只與 WEEKLY 或 MONTHLY 計劃共同使用時有效。 |
/m | 指定一年中的一個月。有效值是 JAN ~ DEC 和 * (每個月)。/m 參數只對于 MONTHLY 計劃有效。在使用 LASTDAY 修飾符時,這個參數是必需的。否則,它是可選的,默認值是 * (每個月)。 |
/i | 指定任務啟動之前計算機空閑多少分鐘。鍵入一個 1 ~ 999 之間的整數。這個參數只對于 ONIDLE 計劃有效,而且是必需的。? |
/st | 以 HH:MM:SS 24 小時格式指定時間。默認值是命令完成時的當前本地時間。/st 參數只對于 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY 和 ONCE 計劃有效。它只對于 ONCE 計劃是必需的。 |
/sd | 以 YYYY/MM/DD 格式指定任務啟動的日期。默認值是當前日期。/sd 參數對于所有的計劃有效,但只對于 ONCE 計劃是必需的。 |
/ed | 指定任務計劃運行的最后日期。此參數是可選的。它對于 ONCE、ONSTART、ONLOGON 或 ONIDLE 計劃無效。默認情況下,計劃沒有結束日期。 |
/s | 指定遠程計算機的名稱或 IP 地址(帶有或者沒有反斜杠)。默認值是本地計算機。 |
/u | 使用特定用戶帳戶的權限運行命令。默認情況下,使用已登錄到運行 SchTasks 的計算機上的用戶的權限運行命令。 |
/p | 指定在 /u 參數中指定的用戶帳戶的密碼。如果使用 /u 參數,則需要該參數。 |
/ru | 使用指定用戶帳戶的權限運行任務。默認情況下,使用用戶登錄到運行 SchTasks 的計算機上的權限運行任務。 |
/p | 指定用戶帳戶的密碼,該用戶帳戶在 /u 參數中指定。如果在指定用戶帳戶的時候忽略了這個參數,SchTasks.exe 會提示您輸入密碼而且不顯示鍵入的文本。使用 NT Authority\System 帳戶權限運行的任務不需要密碼,SchTasks.exe 也不會提示索要密碼。 |
/xml | 從文件的指定任務 XML 中創建任務。 |
/f | 如果指定的任務已經存在,則強制創建任務并抑制警告。 |
# 每天晚上8點30分關機
schtasks /create /tn "BatHome Job 2.2.01" /tr "shutdown /s /f /t 0" /sc daily /st 20:30:00 /ru System
注:服務器上的普通用戶或管理員用戶通常強制要求定期更改密碼,更改密碼之后,該用戶創建的任務計劃將會無法執行,需要手工更改存儲在任務中的密碼。創建任務計劃的時候指定使用 System 用戶將不存在定期更改密碼的問題。
# 每10分鐘執行一次某個腳本
schtasks /create /tn "BatHome Job 2.2.02" /tr """"C:\Test\2.2.02 Backup.bat"""" /sc minute /mo 10 /ru System
注:待執行的程序路徑中包含空格等特殊字符的情況下,需要增加額外的雙引號。
# 每小時過三分的時候運行一次
schtasks /create /tn "BatHome Job 2.2.03" /tr "C:\Test\2.2.03.bat" /sc hourly /st 00:03:00 /ru System
注:因為忽略了 /mo 參數,命令使用了小時計劃的默認值,即每1小時執行一次。
# 從某天開始每三小時運行一次
schtasks /create /tn "BatHome Job 2.2.04" /tr "C:\Test\2.2.04.bat" /sc hourly /mo 3 /sd 2022/09/29 /ru System
注:使用 /mo 參數來指定間隔時間,使用 /sd 參數來指定起始日期。由于命令沒有指定起始時間,當前時間被用作起始時間。
# 每天運行一次直到某天為止
schtasks /create /tn "BatHome Job 2.2.05" /tr "C:\Test\2.2.05.bat" /sc daily /st 09:00:00 /ed 2022/12/31 /ru System
注:忽略了 /mo 參數,所以使用默認間隔 1 來每天上午9點運行命令。使用 /ed 參數指定到2022年12月31日結束。
# 從某天開始每隔一天運行一次
schtasks /create /tn "BatHome Job 2.2.06" /tr "C:\Test\2.2.06.bat" /sc daily /mo 2 /st 15:00:00 /sd 2022/09/29 /ru System
注:使用 /mo 參數來指定 2 天的間隔。
# 每三周運行一次
schtasks /create /tn "BatHome Job 2.2.07" /tr "C:\Test\2.2.07.bat" /sc weekly /mo 3 /ru System
# 每月的第一天運行
schtasks /create /tn "BatHome Job 2.2.08" /tr "C:\Test\2.2.08.bat" /sc monthly /ru System
# 每月的最后一天運行
schtasks /create /tn "BatHome Job 2.2.09" /tr "C:\Test\2.2.09.bat" /sc monthly /mo lastday /m * /ru System
# 每月的第三個周五運行
schtasks /create /tn "BatHome Job 2.2.10" /tr "C:\Test\2.2.10.bat" /sc monthly /mo third /d fri /ru System
# 第四季度每月的第三天運行
schtasks /create /tn "BatHome Job 2.2.11" /tr "C:\Test\2.2.11.bat" /sc monthly /d 3 /m oct,nov,dec /ru System
# 指定日期時間運行一次
schtasks /create /tn "BatHome Job 2.2.12" /tr "C:\Test\2.2.12.bat" /sc once /st 22:00:00 /sd 2022/09/29 /ru System
# 每次系統啟動的時候運行
schtasks /create /tn "BatHome Job 2.2.13" /tr "C:\Test\2.2.13.bat" /sc onstart /ru System
# 每當用戶登錄的時候運行
schtasks /create /tn "BatHome Job 2.2.14" /tr "C:\Test\2.2.14.bat" /sc onlogon /ru System
# 空閑指定時長的時候運行
schtasks /create /tn "BatHome Job 2.2.15" /tr "C:\Test\2.2.15.bat" /sc onidle /i 15 /ru System
注:使用 /i 參數指定系統空閑15分鐘后運行。
2.3 schtasks 修改任務計劃
schtasks /change /tn TaskName [/s computer [/u [domain\]user /p password]] [/tr TaskRun] [/ru [Domain\]User | "System"] [/rp Password]
2.4 schtasks 立即運行任務計劃
schtasks /run /tn TaskName [/s computer [/u [domain\]user /p password]]
注:忽略原有計劃,立即運行任務計劃。不會更改任務計劃好的下次運行時間。
2.5 schtasks 終止由任務啟動的程序
schtasks /end /tn TaskName [/s computer [/u [domain\]user /p password]]
2.6 schtasks 查看任務計劃
schtasks [/query] [/fo {TABLE | LIST | CSV}] [/nh] [/v] [/s computer [/u [domain\]user /p password]]
注:Win7 命令行窗口的中文狀態下 schtasks /query 可能會出錯,可以先用chcp命令切換到英文。
chcp 437
schtasks /query
2.7 schtasks 刪除任務計劃
schtasks /delete /tn {TaskName | *} [/f] [/s computer [/u [domain\]user /p password]]
# 刪除指定名稱的任務計劃
schtasks /delete /tn "GoogleUpdateTaskMachineUA" /f
# 刪除所有的任務計劃
schtasks /delete /tn * /f
注:慎重執行!系統有很多默認的任務計劃,請做好充分的備份。
2.8 沒有參數對應的屬性如何修改
例如:沒有哪個參數可以設置“如果任務運行時間超過以下時間,停止任務”
1) 創建任務計劃:
schtasks /create /tn "BatHome Job 2.8.01" /tr "C:\Test\2.8.01.bat" /sc daily /mo 1 /st 15:14 /ru System
2) 打開任務計劃程序圖形界面,手工設置好超時時間,然后導出xml
# 默認值是3天: <ExecutionTimeLimit>PT72H</ExecutionTimeLimit> # 修改成1小時之后: <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
3) 用修改后的xml文件去創建任務計劃
schtasks /create /ru System /tn "BatHome Job 2.8.02" /xml "C:\Test\2.8.02.xml"
使用bat文件創建系統的任務計劃程序
最近由于需要在電腦上添加任務計劃用來調用自己的腳本,由于使用一段是時間后需要重裝系統,有需要重新進行設置,感覺很麻煩,沒有雙擊一下文件就能創建好的方便。
下面是腳本的內容,創建完成后,在電腦啟動后3分鐘時執行,目標路徑下的bat腳本。
可以根據自己的需求修改
@echo off
set curDir=C:\Users\Administrator\Desktop\test\
schtasks /create /tn record /ru system /tr "'%curDir%sclect.bat'" /sc onStart /delay 0003:00 /rl highest /F /np
@echo on
簡單說一下我了解的幾個參數吧,具體的太復雜了沒專門去研究。
/ru system :加上這個的話創建的任務計劃就是system用戶創建的,刪除這個參數的話運行就是當前用戶創建的任務
/tr "'%curDir%sclect.bat'":是通配符的腳本路徑,由于有的直接輸入時會有問題,特殊字符等等導致無法執行,因此經路徑拆分處理,這里拼接一下可以很方便的解決。
/delay 0003:00:這個應該就是啟動后延時3分鐘啟動,沒有專門研究,可以根據自己的需求修改(0010:00,啟動后延遲10分鐘 ;0000:00啟動后不延遲)
其他的我就不太清楚了,解讀到此結束,希望對大家有幫助。
原文鏈接:https://mp.weixin.qq.com/s/LKTmJuq45bZbxoGVTfla1w
相關推薦
- 2022-09-06 python?如何實現跳過異常繼續執行_python
- 2022-08-30 大表delete刪數據導致數據庫異常解決_oracle
- 2024-03-21 Nacos簡介
- 2022-12-24 詳解Python裝飾器的四種定義形式_python
- 2022-05-08 ASP.NET?MVC從控制器中獲取URL值_實用技巧
- 2022-11-20 C++遞歸算法處理島嶼問題詳解_C 語言
- 2022-12-07 C++小游戲教程之猜數游戲的實現_C 語言
- 2022-06-22 git工作區暫存區與版本庫基本理解及提交流程全解_其它綜合
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支