Skip to main content

计划任务与自动化

schtasks(计划任务,CMD/PowerShell 通用)​

schtasks /create /tn "TaskName" /sc daily /st 09:00 /tr "cmd /c script.bat"   :: 每天 9 点
schtasks /create /tn "backup" /sc weekly /d SUN /st 02:00 /tr "D:\backup.bat"
schtasks /create /tn "check" /sc minute /mo 10 /tr "D:\check.bat" :: 每 10 分钟
schtasks /run /tn "backup" :: 立即运行
schtasks /query /tn "backup" :: 查询任务详情
schtasks /query /fo list /v | findstr "TaskName:\|Next" :: 列出全部任务与下次运行时间
schtasks /change /tn "backup" /st 03:00 /tr "new.bat" :: 修改时间/动作
schtasks /delete /tn "backup" /f :: 删除任务
schtasks /end /tn "backup" :: 停止当前运行
schtasks /create /tn "admin" /sc onlogon /tr "notepad.exe" /rl highest :: 开机登录时以管理员运行

常用触发器 /sc:ONCE 一次、DAILY、WEEKLY、MONTHLY、ONLOGON 登录时、ONSTART 开机时、MINUTE/HOURLY 间隔。

PowerShell 创建计划任务(等价做法)​

$action = New-ScheduledTaskAction -Execute "D:\backup.bat"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -TaskName "backup" -Action $action -Trigger $trigger -Force

# 查看 / 删除
Get-ScheduledTask -TaskName "backup"
Unregister-ScheduledTask -TaskName "backup"

开机启动项​

%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup     :: 当前用户启动文件夹
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup :: 所有用户
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v MyApp /t REG_SZ /d "C:\app.exe"
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v MyApp /f

推荐用任务管理器「启动」页管理(taskmgr → 启动)。

PowerShell 定时 / 延时​

Start-Sleep -Seconds 30                      # 等待 30 秒
Register-ObjectEvent / Register-ScheduledJob # 复杂场景见文档

# 定时循环(每 5 分钟执行,后台运行示例)
while ($true) { Send-Backup; Start-Sleep -Seconds 300 }

事件循环 / 文件监控自动任务​

$watcher = New-Object System.IO.FileSystemWatcher -Property @{Path="D:\inbox"; Filter="*.csv"}
Register-ObjectEvent $watcher "Created" -Action {
Write-Host "新文件: $($Event.SourceEventArgs.FullPath)"
# 在这里执行处理逻辑
}
# 用完后 Unregister-Event

自动化脚本常用技巧(CMD)​

:: 判断管理员权限
net session >nul 2>&1
if errorlevel 1 (echo 请以管理员身份运行 & pause & exit /b 1)

:: 日志输出带时间戳
echo %date% %time% Starting backup >> D:\logs\backup.log

:: 失败则退出并记录
your_command.exe
if errorlevel 1 (echo FAIL at %time% >> D:\logs\error.log & exit /b 1)

PowerShell 脚本头加:

$ErrorActionPreference = "Stop"              # 出错即停
Start-Transcript -Path D:\logs\run.log # 记录全部输出
Start-Process powershell -Verb RunAs # 自动提权(管理员)

常见自动化场景​

场景方案
每天备份文件schtasks 每天 + robocopy 脚本
启动时开服务/软件启动文件夹或计划任务 ONLOGON
定期清理日志计划任务 + PowerShell 脚本
监控文件夹新文件入库FileSystemWatcher 事件
定时重启服务计划任务 + Restart-Service

注意:计划任务默认在当前用户的凭据下运行,涉及网络盘/管理员操作需配置「使用最高权限」(highest) 并测试与登录交互相关的设置。