Vielen Dank autoiter,
habe es mir angeguckt, konnte aber den _FileCopyEx nicht testen (keine reaktion) für fehler suche war ich nun zu faul, nur das _FileCopyEx_CreateArrays daher habe ich dies schon mal umgebaut
AutoIt
#include <Array.au3>
#include <File.au3>
#include <GDIPlus.au3>
Global $sOriginalDir, $sSourceDir, $srcDirLen, $sDestDir, $ProgTitleDir, $fileCount, $fileCounttxt, $iDirSize2 = 0, $iDirSize = 0, $perc, $aSourceFiles[1], $aDestDir[1], $Count = 0, $aFileList[0], $sOutPutDIR[0], $FileName[0], $sDrive, $sDir, $sFileName, $sExtension, $srcFileLen, $aFL[1], $FN[1], $sOPDIR[1], $aPathSplit
Func _CopyDirWithProgress($sOriginalDir, $sDestDir, $ProgTitleDir, $NASPath, $sOriginalBackupDir, $sDestBackupDir)
$fileCount = 0
$fileCount = FileReadLine($NASPath & "\Script\Filecount.txt", 1)
If StringRight($sOriginalDir, 1) <> '\' Then $sOriginalDir = $sOriginalDir & '\'
If StringRight($sDestDir, 1) <> '\' Then $sDestDir = $sDestDir & '\'
If $sOriginalDir = $sDestDir Then Return -1
ProgressOn($ProgTitleDir, 'Berechne Dateien' & @LF & @LF, 'Bitte warten...', -1, -1, 18)
_DirArray($sOriginalDir)
$fileCount = $aFileList[0]
FileDelete($NASPath & "\Script\Filecount.txt")
FileWrite($NASPath & "\Script\Filecount.txt", $fileCount)
$fileCount = $fileCount - 1
$iDirSize = Round($iDirSize2 / (1024 * 1024), 2)
If $aFileList[0] = 0 Then
ProgressOff()
SetError(1)
Return -1
EndIf
If $sOutPutDIR[0] = 0 Then
ProgressOff()
SetError(1)
Return -1
EndIf
Local $iCopiedSize = 0, $iCopiedSize2 = 0, $fProgress = 0
Local $c, $iOutPut = 0, $sLost = '', $sError
ProgressSet(Int($fProgress * 100), $FileName[1], 'Kopiere Datei:')
For $c = 1 To $fileCount
ProgressSet(Int($fProgress * 100), $FileName[$c] & @LF & $c & ' von ' & $fileCount & ' Dateien Kopiert' & @LF & $iCopiedSize & ' von ' & $iDirSize & ' MB kopiert.', 'Kopiere Datei: ' & Round($fProgress * 100, 2) & ' % - Fertig! ')
If RunWait(@ComSpec & ' /c XCOPY "' & $sOriginalDir & $aFileList[$c] & '" "' & $sDestDir & $sOutPutDIR[$c] & '\" /D /S /V /C /H /R /Y /F /G /I /E >' & @TempDir & '\o.tmp', $sOriginalDir, @SW_HIDE) Then
$sError = FileReadLine(@TempDir & '\o.tmp', 1)
If $sError = "" Then RunWait(@ComSpec & ' /c XCOPY "' & $sOriginalBackupDir & $aFileList[$c] & '" "' & $sDestBackupDir & $sOutPutDIR[$c] & '\" /D /S /V /C /H /R /Y /F /G /I /E >' & @TempDir & '\o.tmp', $sOriginalDir, @SW_HIDE)
$iOutPut = $iOutPut + 1
$sLost = $sLost & $sOriginalDir & $aFileList[$c] & ' ' & $sError & @CRLF
EndIf
FileDelete(@TempDir & '\o.tmp')
FileSetAttrib($sDestDir & $sOutPutDIR[$c] & $FileName[$c], "+A-RSH") ;<- Comment this line if you do not want attribs reset.
$iCopiedSize2 = $iCopiedSize2 + FileGetSize($sOriginalDir & $aFileList[$c])
$iCopiedSize = Round($iCopiedSize2 / (1024 * 1024), 2)
$fProgress = $iCopiedSize / $iDirSize
$fProgress = $iCopiedSize / $iDirSize
Next
ProgressOff()
If $sLost <> '' Then ;tries to write the log somewhere.
If FileWrite($NASPath & 'notcopied.txt', $sLost) = 0 Then
FileWrite(@DesktopDir & '\notcopied.txt', $sLost)
EndIf
EndIf
Return $iOutPut
EndFunc ;==>_CopyDirWithProgress
Func _DirArray($sSourceDir)
Global $aFileList[0]
Global $FileName[0]
Global $sOutPutDIR[0]
$iDirSize2 = 0
_FileCopyEx_CreateArrays($sSourceDir, 'Archiv', '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
_FileCopyEx_CreateArrays($sSourceDir, 'Backups', '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
_FileCopyEx_CreateArrays($sSourceDir, 'Briefpapier', '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
_FileCopyEx_CreateArrays($sSourceDir, 'DB', '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
_FileCopyEx_CreateArrays($sSourceDir, 'Dokumente', '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
_FileCopyEx_CreateArrays($sSourceDir, 'Internetmarke', '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
_FileCopyEx_CreateArrays($sSourceDir, 'Reports\1', '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
_FileCopyEx_CreateArrays($sSourceDir, 'Zeichnungen\1', '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
_ArrayInsert($aFileList, 0, UBound($aFileList) + 1)
_ArrayInsert($sOutPutDIR, 0, UBound($sOutPutDIR) + 1)
_ArrayInsert($FileName, 0, UBound($FileName) + 1)
EndFunc ;==>_DirArray
Func _FileCopyEx_CreateArrays($sSourceDirOrig, $UnderSourceDir, $sMask = '*', $iRecur = $FLTAR_RECUR)
$sSourceDir = $sSourceDirOrig & $UnderSourceDir
$srcDirLen = StringLen($sSourceDirOrig)
If $fileCount = "" Then $fileCount = 375
$aSourceFiles = _FileListToArrayRec($sSourceDir, $sMask, $FLTAR_FILES, $iRecur, $FLTAR_SORT)
If @error Then Return SetError(1, 0, 0) ; wenn sich im Quellverzeichnis keine Dateien befinden, dann Fehlercode = 1
If IsNumber($aSourceFiles[0]) Then _ArrayDelete($aSourceFiles, 0) ; wenn das Array 1-basiert ist, dann den "Zähler" entfernen
Local $sTmp = ''
If StringRight($sSourceDir, 1) <> '\' Then $sSourceDir &= '\' ; wenn beim Quellverzeichnis der hintere Backslash fehlt, dann hinzufügen
ReDim $aFL[UBound($aSourceFiles)]
ReDim $FN[UBound($aSourceFiles)]
ReDim $sOPDIR[UBound($aSourceFiles)]
For $i = 0 To UBound($aSourceFiles) - 1
$sTmp = StringRegExpReplace($aSourceFiles[$i], '(.+\\).*', '$1') ; Verzeichnis aus der Quelldatei extrahieren
If $sTmp = $aSourceFiles[$i] Then $sTmp = '' ; wenn kein Verzeichnis vorhanden, dann einen Leerstring benutzen
$aPathSplit = _PathSplit($sSourceDir & $aSourceFiles[$i], $sDrive, $sDir, $sFileName, $sExtension)
$aSourceFiles[$i] = $sSourceDir & $aSourceFiles[$i] ; der Quelldatei das Quellverzeichnis voranstellen
$aFL[$i] = StringTrimLeft($aSourceFiles[$i], $srcDirLen) ; der Quelldatei das Quellverzeichnis voranstellen
$FN[$i] = $aPathSplit[3] & $aPathSplit[4] ; der Quelldatei das Quellverzeichnis voranstellen
$srcFileLen = StringLen($FN[$i])
$sOPDIR[$i] = StringTrimRight($aFL[$i], $srcFileLen) ; der Quelldatei das Quellverzeichnis voranstellen
$Count = $Count + 1
$perc = $Count / $fileCount
$iDirSize2 = $iDirSize2 + FileGetSize($aSourceFiles[$i])
ProgressSet(Int($perc * 100), 'Bitte warten...' & @LF & $Count & ' Dateien' & @LF & Round($iDirSize2 / (1024 * 1024), 2) & ' MB', 'Berechne Dateien')
Next
_ArrayConcatenate($aFileList, $aFL)
_ArrayConcatenate($FileName, $FN)
_ArrayConcatenate($sOutPutDIR, $sOPDIR)
Return SetError(0, 0, 1)
EndFunc ;==>_FileCopyEx_CreateArrays
Alles anzeigen