Что нового

Ожидание завершения DirCopy

TwDY

Новичок
Сообщения
13
Репутация
0
Добрый день, подскажите пожалуйста, я копирую кучу папок из 1 эталонной, далее изменяю файлы внутри папок, как лучше всего дождаться конца копирования, прежде чем начинать изменять содержимое папок? пока использую sleep, но хотелось бы проверять.
Код:
#include-once
#include <Math.au3>
#include <FileOperations.au3>
#include <Array.au3>

Global $Pathfrom = @ScriptDir & '\' & "etalon"
If Not FileExists('C:\AutoUAT\m') Then  DirCreate('C:\AutoUAT\m')

For $i = 1 To 9
	If Not FileExists('C:\AutoUAT\m\'&"m0"& $i) Then
	   _DirCopy($Pathfrom,'C:\AutoUAT\m\'&"m0"& $i)
	Else
	 FileCopy($Pathfrom  & "\*.ini", 'C:\AutoUAT\m\m0' & $i,9)
    EndIf
	Next

For $i = 10 To 30
	If Not FileExists('C:\AutoUAT\m\'&"m"& $i) Then
	   _DirCopy($Pathfrom,'C:\AutoUAT\m\'&"m"& $i)
	Else
	   FileCopy($Pathfrom  & "\*.ini", 'C:\AutoUAT\m\m' & $i,9)
    EndIf
	Next

Sleep(10000);

  Local $sPath ='C:\AutoUAT\m\', $aFiles, $aFolders
Global $aFolders=_FO_FolderSearch($sPath, 'm*')

For $i=1 To $aFolders[0]
    $aFiles = _FO_FileSearch($aFolders[$i], '*.ini')
    For $f=1 To $aFiles[0]
     IniWrite ($aFiles[$f], "Common", "ComPort",2+StringRight( $aFolders[$i],2))
    Next
Next


Func _DirCopy($sSrc, $sDest, $iReplace = 0)
    Local $sReplace = ' /Y'
    If Not $iReplace Then
        $sReplace = ''
    EndIf
    Run('xcopy /H /E /C /I /S' & $sReplace & ' "' & $sSrc & '" "' & $sDest & '"', '', @SW_HIDE)
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
TwDY [?]
как лучше всего дождаться конца копирования
ИМХО, или использовать штатную функцию
Код:
DirCopy()
Или примерно так
Код:
Func _DirCopy($sSrc, $sDest, $iReplace = 0)
    Local $sReplace = ' /Y', $i_Pid
    If Not $iReplace Then
        $sReplace = ''
    EndIf
    $i_Pid = Run('xcopy /H /E /C /I /S' & $sReplace & ' "' & $sSrc & '" "' & $sDest & '"', '', @SW_HIDE)
	While ProcessExists($i_Pid)
		Sleep(100)
	WEnd
EndFunc
 
Автор
T

TwDY

Новичок
Сообщения
13
Репутация
0
Спасибо, а быстрее ничего нет?А то увеличение скорости в 50 раз не радует. Это пока 30 папок, а если их будет 160...
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
как лучше всего дождаться конца копирования, прежде чем начинать изменять содержимое папок?
Вместо
Код:
Run()

использовать
Код:
RunWait()

пример
Код:
RunWait(@ComSpec & " /c " & 'xcopy /H /E /C /I /S /Y \\Server\Test D:\Test', "", @SW_HIDE)
MsgBox(0, "", "Готово") ;сообщение появится после завершения копирования
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Yuriy,
У меня периодически, в версиях 3.3.6.1 и 3.3.8.1, функция RunWait() зависает (процесса уже нет, а скрипт чего-то ждет). Я ее перестал использовать.
 
Верх