Powershell 为什么可以';我不能在文件后面移动它';下载了什么?
我正在尝试运行一个简单的脚本,它可以检测某个文件类型何时下载到我的下载目录,然后将其移动到正确的位置。我还没有添加实际的文件类型过滤,因为我一直停留在“检测正在下载的文件”部分 如果我自己在下载中创建一个文件,脚本就可以工作。但是,如果Chrome在下载文件时创建该文件,它就无法工作。它打印“工作”,因此它检测文件创建,但不移动它 为什么会这样Powershell 为什么可以';我不能在文件后面移动它';下载了什么?,powershell,Powershell,我正在尝试运行一个简单的脚本,它可以检测某个文件类型何时下载到我的下载目录,然后将其移动到正确的位置。我还没有添加实际的文件类型过滤,因为我一直停留在“检测正在下载的文件”部分 如果我自己在下载中创建一个文件,脚本就可以工作。但是,如果Chrome在下载文件时创建该文件,它就无法工作。它打印“工作”,因此它检测文件创建,但不移动它 为什么会这样 ### Set folder and files to watch and misc flags $watcher = New-Object S
### 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}
你的代码工作正常。。。无论如何,在linux上。以下是我的设置: 测试1.ps1:
$sourcepath = '/home/veefu/watched/sourcefolder'
$destpath = '/home/veefu/watched/destfolder'
$watcher = New-object System.io.filesystemwatcher
$watcher.path = $sourcepath
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true
$action = {
$path = $event.SourceEventARgs.FullPath
Move-Item -Path $path -Destination $destpath
}
Register-ObjectEvent $watcher 'Created' -action $action
首先是:
. ./test.ps1
为了测试,我下载了一个带有chrome的.jpg文件并保存到$sourcepath
。侦听作业发出了以下错误,但最终移动了.jpg文件:
> get-job |Receive-Job
移动项目:找不到路径“/home/veefu/wasted/sourcefolder/after”
因为它不存在。在
/home/veefu/watched/test.ps1:14字符:5
+移动项目-路径$Path-目标$destpath
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:ObjectNotFound:(/home/veefu/wa…JPG.crdownload:String)[移动项目],
ItemNotFoundException
+FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand移动项目
:夜间后找不到路径“/home/veefu/wasted/sourcefolder/”
out.JPG.crdownload'因为它不存在。在
/home/veefu/watched/test.ps1:14字符:5
+移动项目-路径$Path-目标$destpath
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:ObjectNotFound:(/home/veefu/wa…JPG.crdownload:String)[移动项目],
ItemNotFoundException
+FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand
Linux上的事件可能与Windows上生成的事件不同
我为测试选择的文件大小也可能导致与您选择的结果不同。从错误判断,.jpg似乎在侦听器尝试处理事件时已经被重命名
您可以尝试从监视作业中读取错误事件,以获得有关以下问题的线索:
Get-Job | Receive-Job
另外,如果您正在从powershell控制台运行脚本,则不需要while($true){sleep 5}
;负责监听的工作应该持续到您的powershell进程完成为止
为此,您可能需要使用
Get Job
、Stop Job
和Remove Job
检查正在运行的作业数量,并清理剩余的作业。您是否在等待下载完成?FileSystemWatcher可能会向您提供创建事件,但该文件在下载时仍然被独占锁定,并且很可能被重命名。除了创建的
之外,您还有哪些其他事件可以挂接?@NoRefundsNoReturns正确,刚刚确认了这一点。我正在做一些测试,以找到一个解决办法,也许是“再试一次”类型的交易。可能是重命名了?Chrome一开始就像是UnconfirmedDownload.02847028
,然后在完成时给他们起了一个正确的名字。这是一个旧的答案,但链接已经消失了。寻找一个最新的:我让它工作起来了,它一直在复制.tmp文件,但没有复制我用作测试的.pdf文件。