Hallo Dietmar,
so sollte es funktionieren:
Spoiler anzeigen
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;
; geändert durch Dietmar // Progress integriert und Ausgabe in INI-Datei mit Dateieigenschaften
;
;==================================================================================================
Dim $Progress_count = 0
;~Dim $Progress_enable
;~Dim $Progress_limit
Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0', $sProgress_enable = 1, $sProgress_limit = 0, $sExport_file = "c:\dummy.ini")
;~ MsgBox(4096,"",$sPath & @CR & $sExt & @CRLF & $iDir & @CRLF & $iRetType & @CRLF & $sDelim & @CRLF & $sProgress_enable & @CRLF & $sProgress_limit & @CRLF & $sExport_file)
;~ Exit
$sPath_Len = StringLen($sPath)
If $sProgress_limit = 0 Then
$sProgress_enable = 0
Else
If $sProgress_enable = 1 Then
$sProgress_count = 0
ProgressOn("Dateiliste von '" & $sPath & "' wird erstellt", "Bitte haben Sie etwas Geduld.")
EndIf
EndIf
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
FileDelete($sExport_file) ;<=======================
_ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim, $sProgress_enable, $sProgress_limit, $sExport_file, $sPath_Len)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
If $sProgress_enable = 1 Then ProgressOff()
EndFunc ;==>_GetFilesFolder_Rekursiv
Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF, $Progress_enable = 1, $Progress_limit = 2000, $Export_file = "d:\dummy.ini", $Path_Len = 1)
[/autoit] [autoit][/autoit] [autoit];~ MsgBox(4096,"",@CRLF & $Ext & @CRLF & $Dir & @CRLF & $Delim & @CRLF & $Progress_enable & @CRLF & $Progress_limit & @CRLF & $Export_file & @CRLF & $sPath_Len)
;~ Exit
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
IniWrite($Export_file, StringTrimRight(StringTrimLeft($file.path, $Path_Len), StringLen($file.name)), $file.Name, '"' & $file.Size & "|" & $file.DateCreated & "|" & $file.DateLastModified & "|" & FileGetVersion($file.Path, "FileVersion") & "|" & FileGetVersion($file.Path, "ProductVersion") & '"')
If $Progress_enable = 1 Then
$Progress_count = $Progress_count + 1
ProgressSet($Progress_count / ($Progress_limit / 100), $Progress_count & " von " & $Progress_limit & " Dateien ermittelt")
EndIf
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim, $Progress_enable, $Progress_limit, $Export_file) ;<==========================
Next
EndFunc ;==>_ShowSubFolders
;Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0', $sProgress_enable = 1, $sProgress_limit = 0, $sExport_file = "c:\dummy.ini")
_GetFilesFolder_Rekursiv("c:\programme\autoIt3\downloads", '*', 0, 0, 0, 1,10000, "c:\test.txt")
[/autoit]
ich habe lediglich Filedelete (damit die Ausgabedatei gelöscgt wird) und beim rekursiven Aufruf von _ShowSubFolders alle Parameter angegeben,
getestet habe ich so:
[autoit]_GetFilesFolder_Rekursiv("c:\programme\autoIt3\downloads", '*', 0, 0, 0, 1,10000, @ScriptDir & "\test.txt")
[/autoit]mfg autoBert
mfg autoBert