【发布时间】:2018-08-31 00:21:15
【问题描述】:
我正在尝试运行一个简单的脚本,该脚本会检测何时将某个文件类型下载到我的下载目录,然后将其移动到正确的位置。我还没有添加实际的文件类型过滤,因为我被困在“检测正在下载的文件”部分。
如果我自己在“下载”中创建一个文件,该脚本就可以工作。但是,如果 Chrome 在下载文件时创建文件,它就不起作用。它打印“工作”,因此它正在检测文件创建,但没有移动它。
为什么会这样?
### Set folder and files to watch and misc flags
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\Users\Aerovistae\Downloads"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true
### Define actions to be taken when an event is detected
$action = { $path = $Event.SourceEventArgs.FullPath
Write-Host "working!"
Move-Item -Path $path -Destination "C:\Users\Aerovistae\Desktop"
}
### Decide which events to watch
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}
【问题讨论】:
-
您是在等到下载完成吗? FileSystemWatcher 可能会为您提供 Create 事件,但文件在下载时仍处于独占锁定状态,并且很可能已重命名。除了
Created,你还有哪些可以参与的活动? -
@NoRefundsNoReturns 正确,刚刚确认了这一点。我正在做一些测试以找到解决方法,也许是“再试一次”类型的交易。
-
嗯。也许
Renamed? Chrome 以UnconfirmedDownload.02847028之类的形式开始,然后在完成时为其提供正确的名称。 -
这是一个旧答案,但链接已经消失。寻找当前的:stackoverflow.com/questions/46730384/…
-
我搞定了,它一直在复制 .tmp 文件,但不是我用作测试的 .pdf。
标签: powershell