【问题标题】:Powershell test-path then remove-item but file in use by another processPowershell测试路径然后删除项目但文件正在被另一个进程使用
【发布时间】:2016-07-14 13:15:59
【问题描述】:

我正在使用 Powershell 进行一些文件操作并执行以下步骤:

  1. 将文件从一个位置复制到另一个位置(复制项)
  2. 验证新文件是否在预期位置(测试路径)
  3. 如果在新位置验证,请移除原始 (remove-item)

此过程在 99.9% 的情况下都有效,但有时我会在删除项目步骤发生时收到错误消息,通知我原始文件已在使用/锁定。我只能假设使用它的过程是第 1 步或第 2 步中的复制项/测试路径。

我是否需要指示 Powershell 等到复制项/测试路径完成后再继续删除项?还是更有可能有另一个进程在其他地方运行,例如导致此问题的访问 AV?如果是这样,是否有一种方法可以在文件锁定到位时轻松重试?

这是执行上述步骤的部分代码:

if ($copySuccess = "TRUE") {
    $wiFiles = Get-ChildItem $xmlDir -Filter $itemNum*.*
    $wiFiles | ForEach-Object {
        if ($copySuccess -eq "TRUE") {
            Copy-Item -LiteralPath $xmlDir\$_ -Destination $processedDir
                if (!(Test-Path -LiteralPath $processedDir\$_)) {
                    $copySuccess = "FALSE"
                }
            } 
        }
    }                    
    if ($copySuccess -eq "TRUE") {
        Get-ChildItem $xmlDir -Filter $itemNum*.* | Remove-Item
    }

要移动的文件是小于 1MB 的小型文本文件或图像文件,通常每个 itemNum 小于 10 个文件。

谢谢,罗伯。

【问题讨论】:

  • 脚本本身在哪里?我们至少需要看到一个minimal reproducible example 才能验证为什么文件可能会被锁定。
  • Copy-Item 是同步的,所以它不太可能是罪魁祸首。扫描文件系统的 AV 或其他软件(如果它位于 google drive/dropbox/skydrive 文件夹中,可能是索引器、同步软件)更有可能。要确定你必须做什么,你必须弄清楚是什么锁定了它。

标签: powershell


【解决方案1】:

您的 cmdlet 不太可能导致问题。如果您想确保每个 cmdlet 在下一个开始之前完成,请将每个命令包装在

$job1 = Start-Job { [Powershell code] }
Wait-Job $job1

对于删除命令,您可以尝试类似

While ( Test-Path($yourFileDir) ){
    Try{
        remove-item [your item] -ErrorAction Stop
    }catch{
        Write-Verbose "File locked, trying again in 5"
        Start-Sleep -seconds 5
    }
}

当然,您可以根据自己的需要进行整理,添加适当的超时时间等。

【讨论】:

  • Flash,该代码看起来应该很合适,谢谢!会尝试更新。干杯,罗伯。
  • @RobBerry,进展如何?将任务作为作业运行是否解决了问题或 while 语句,还是两者都需要?我可能很快就会做类似的事情,想知道你过得怎么样。
  • 嗨,Flash,我之前进行了快速测试,但遇到了问题,因为删除项目出错后未触发捕获。明天需要做一些测试,但会告诉你。 Rgds,罗伯。
  • 您好 Flash_Steel,让代码与 catch 一起工作,只需要在 remove-item 之后添加 -ErrorAction Stop 以启用 catch 触发。感谢您的帮助,罗布。
  • 太好了。我已经更新了答案,所以它可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2012-10-27
相关资源
最近更新 更多