我使用PowerShell的一些文件操作,並執行以下步驟:(Powershell的測試路徑然後刪除項目,但文件由另一個進程使用
- 複製從一個位置的文件到另一個禁止複製項)
- 驗證新的文件是它的預期(測試路徑)
- 如果在新位置驗證,刪除原始(刪除項)
這個過程工程的99.9%時間但是someti mes當刪除項目步驟發生時,我收到錯誤通知我原始文件已被使用/鎖定。我只能假定使用這個過程是步驟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並且通常< 10每itemNum文件。
謝謝,羅布。
腳本本身在哪裏?我們需要至少看一個[mcve]以驗證爲什麼可能會鎖定文件。 – gravity
'Copy-Item'是同步的,所以它不可能是罪魁禍首。掃描文件系統的AV或其他軟件(如果它位於谷歌驅動器/保管箱/ skydrive文件夾中,可能是索引器,同步軟件)更有可能。要確定你必須做什麼,你必須弄清楚什麼是鎖定它。 – briantist