0

我需要先创建然后通过 powershell 复制数百个文件夹和文件(首先在本地存储上创建它们,然后将它们复制到远程存储)。但是,当我的 foreach 循环运行时,由于“另一个进程”阻塞了文件/文件夹,每 40 次左右的写入尝试都会失败。我目前在每个文件创建(100 毫秒)之间使用简单的睡眠解决了这个问题。但是,我想知道是否没有更好的方法来做到这一点?特别是在复制多个文件时,睡眠将取决于网络延迟,对我来说似乎不是一个好的解决方案。

有没有办法在开始另一个操作之前“等待”文件的写操作完成?或者检查一个文件是否仍然被一个进程阻止并等到它再次空闲?

4

1 回答 1

0

您是否尝试过将代码作为工作来运行?例子:

foreach ($file in $files) {
    $job = Start-Job -ScriptBlock {
     #operation here..
    } | Wait-Job
    #Log result of job using ex. $job and:  '$job | Receive-Job'   to get output
}

您还可以扩展它以创建多个作业,然后使用Get-Job | Wait-Job等待全部完成后再继续。

于 2012-12-16T22:18:16.480 回答