Powershell 为什么可以';我不能在文件后面移动它';下载了什么?

Powershell 为什么可以';我不能在文件后面移动它';下载了什么?,powershell,Powershell,我正在尝试运行一个简单的脚本,它可以检测某个文件类型何时下载到我的下载目录,然后将其移动到正确的位置。我还没有添加实际的文件类型过滤,因为我一直停留在“检测正在下载的文件”部分 如果我自己在下载中创建一个文件,脚本就可以工作。但是,如果Chrome在下载文件时创建该文件,它就无法工作。它打印“工作”,因此它检测文件创建,但不移动它 为什么会这样 ### Set folder and files to watch and misc flags $watcher = New-Object S

我正在尝试运行一个简单的脚本,它可以检测某个文件类型何时下载到我的下载目录,然后将其移动到正确的位置。我还没有添加实际的文件类型过滤,因为我一直停留在“检测正在下载的文件”部分

如果我自己在下载中创建一个文件,脚本就可以工作。但是,如果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}

你的代码工作正常。。。无论如何,在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文件。