windows:下载文件时触发任务
windows:下载文件时触发任务
在 Windows 中,可以使用 PowerShell 的 FileSystemWatcher
类来监控指定文件夹的文件创建事件,并在检测到新文件时触发脚本。以下是详细步骤和代码示例:
方法 1:直接运行 PowerShell 监控脚本
步骤 1:创建 PowerShell 监控脚本
将以下代码保存为 FileWatcher.ps1
(例如在 C:\Scripts\FileWatcher.ps1
):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 定义要监控的文件夹路径
$watchFolder = "C:\Users\YourUsername\Downloads" # 替换为你的目标文件夹
# 定义要触发的脚本路径(可以是 .ps1、.bat 或 .exe)
$scriptToRun = "C:\Scripts\ProcessFile.ps1" # 替换为你的脚本路径
# 创建 FileSystemWatcher 对象
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $watchFolder
$watcher.Filter = "*.*" # 监控所有文件,可以改成 "*.pdf" 等特定类型
$watcher.IncludeSubdirectories = $false # 是否监控子文件夹
$watcher.EnableRaisingEvents = $true # 启用事件监听
# 定义文件创建时的动作
$action = {
$filePath = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$fileName = $Event.SourceEventArgs.Name
Write-Host "检测到新文件: $fileName ($changeType)"
# 调用你的脚本,并传递文件路径作为参数
Start-Process "powershell.exe" -ArgumentList "-File `"$scriptToRun`" `"$filePath`""
}
# 注册事件(当文件创建时触发)
Register-ObjectEvent $watcher "Created" -Action $action
# 保持脚本运行
Write-Host "正在监控文件夹: $watchFolder"
Write-Host "按 Ctrl+C 停止监控..."
try {
while ($true) {
Start-Sleep -Seconds 1 # 防止脚本退出
}
}
finally {
# 清理(按 Ctrl+C 后取消监控)
$watcher.EnableRaisingEvents = $false
$watcher.Dispose()
Write-Host "监控已停止。"
}
步骤 2:创建被触发的脚本
例如,创建 C:\Scripts\ProcessFile.ps1
,用于处理新文件:
1
2
3
4
5
6
7
8
9
10
param (
[string]$filePath # 接收传递的文件路径
)
Write-Host "正在处理文件: $filePath"
# 在这里编写你的处理逻辑,例如:
# - 移动文件
# - 解压文件
# - 调用其他程序
Move-Item -Path $filePath -Destination "C:\ProcessedFiles\" -Force
步骤 3:运行监控脚本
- 以管理员身份打开 PowerShell(避免权限问题)。
- 运行:
1 2
Set-ExecutionPolicy RemoteSigned -Scope Process # 允许脚本运行(临时) C:\Scripts\FileWatcher.ps1
- 现在,往
C:\Users\YourUsername\Downloads
放入文件时,ProcessFile.ps1
会自动执行。
方法 2:使用 Windows 任务计划程序(后台运行)
如果希望监控脚本在后台长期运行(即使关闭 PowerShell),可以结合 Windows 任务计划程序:
步骤 1:创建启动脚本的快捷方式
- 新建一个
.bat
文件(如StartWatcher.bat
):1 2
@echo off powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\FileWatcher.ps1"
步骤 2:设置任务计划程序
- 打开 任务计划程序(
taskschd.msc
)。 - 创建任务:
- 触发器:
登录时
或系统启动时
。 - 操作:启动
StartWatcher.bat
。 - 勾选
使用最高权限运行
(避免权限问题)。
- 触发器:
- 任务会随系统启动,并在后台监控文件夹。
注意事项
- 文件完整性:大文件可能未完全下载就被触发,建议在脚本中增加延迟检查(如
Start-Sleep -Seconds 5
)。 - 避免重复触发:某些程序(如浏览器)可能先创建临时文件再重命名,导致多次触发,可以过滤特定扩展名(如
$watcher.Filter = "*.pdf"
)。 - 日志记录:可以在
ProcessFile.ps1
中增加日志功能,方便排查问题:1
Add-Content -Path "C:\Scripts\log.txt" -Value "$(Get-Date) 处理文件: $filePath"
总结
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
直接运行 PowerShell | 临时测试 | 简单直接 | 关闭窗口后停止 |
任务计划程序 | 长期后台运行 | 开机自启 | 需额外配置 |
选择适合你的方式即可实现 文件监控 + 自动触发脚本!
本文由作者按照 CC BY 4.0 进行授权