Я использую объект файловой системы в Powershell, чтобы выполнить циклический просмотр папок: скажем, имея oldFolder, currentFolder и newFolder, это процесс:
- DeleteFolder oldFolder
- MoveFolder currentFolder в oldFolder
- Переместить новую папку в текущую папку
При выполнении в сценарии шаг 2 или 3 случайным образом выбрасывает CTL_E_PERMISSIONDENIED.
Когда сценарий останавливается, я повторяю последнюю команду, и она заканчивается правильно.
Похоже, что метод MoveFolder работает полу асинхронно.
ps: в папках есть подпапки и много файлов
Я пытался добавить некоторую задержку, но я не счастлив, не зная, что происходит.
$oldFolder = "D:\test\folder_OLD"
$curFolder = "D:\test\folder"
$newFolder = "D:\test\folder_NEW"
$fso = $fso = New-Object -ComObject scripting.filesystemobject
if (Test-Path $oldFolder) {$fso.DeleteFolder($oldFolder)}
if (Test-Path $curFolder) {$fso.MoveFolder($curFolder,$oldFolder)}
$fso.MoveFolder($newFolder,$curFolder)