Da mein Vater für seine Arbeit die Lines von über 800 Dateien zählen musste, hat er sich gedacht, dass er sich dafür ein Perl Script schreibt, jedoch hat er gestern vergessen es sich nach hause zu schicken lassen. Also dachte ich mir: Das kannst du auch mit Autoit.
Also mein Programm zählt die Lines von allen textartigen Dateien.
Danke an bernd670 für seine FindListRecursive UDF.
Spoiler anzeigen
#include <File.au3>
#include <Array.au3>
Global $dis = ""
Global $add = ""
While 1
HotKeySet("{F1}","open")
HotKeySet("{ESC}","esc")
WEnd
Func open()
$open = FileSelectFolder("Choose a folder",@DesktopDir)
$file = FileListRecursive($open,"*.*",1,1)
$input = 0
While $input <> 1
$input = InputBox("File Type","Enter your file type, for example: .txt")
If $input <> "" Then
For $i = 1 to _ArrayMax($file) Step 1
If StringInStr($file[$i],$input) <> 0 Then
Dim $count
_FileReadToArray($file[$i],$count)
If $i = 1 Then
$dis = $count[0]
Else
$add = $count[0]
$dis = $dis + $add
Endif
Endif
Next
Else
$input = 1
Endif
WEnd
MsgBox(0,"Lines","Lines: " & $dis)
$dis = ""
$add = ""
EndFunc
Func esc()
Exit
EndFunc
;===============================================================================
; Name: FileFindRecursive
; Description: Sucht rekursiv nach Dateien und Ordnern
; Parameter(s): $szStartPath = Path ab dem gesucht werden soll
; $szFileName = Datei nach der gesucht werden soll
; $iFlag (optional) = Gibt an was zurückgegeben werden soll
; 0 = Dateien und Ordner (default)
; 1 = nur Dateien
; 2 = nur Ordner (ignoriert $szFileName)
; $iRetFormat (optional) = Rückgabeformat
; 0 = als String (default)
; 1 = als Array
; $szDelim (optional) = Trennzeichen wenn $iRetFormat = 0 (@CRLF ist default)
; Requirement(s): keine
; Return Value(s): bei Erfolg: Ergebnis als String oder Array
; bei Fehler:
; Author(s): bernd670
;
;===============================================================================
Func FileListRecursive($szStartPath, $szFileName, $iFlag = 0, $iRetFormat = 0, $szDelim = @CRLF)
Local $hFF, $szFindName, $szRetValue = ""
If $iFlag = Default Then $iFlag = 0
If $iRetFormat = Default Then $iRetFormat = 0
If $szDelim = Default Then $szDelim = @CRLF
If StringRight($szStartPath, 1) <> "\" Then $szStartPath &= "\"
If $iFlag < 2 Then
$hFF = FileFindFirstFile($szStartPath & $szFileName)
If $hFF <> -1 Then
While True
$szFindName = FileFindNextFile($hFF)
If @error Then
FileClose($hFF)
ExitLoop
EndIf
If ($szRetValue <> "") And (StringRight($szRetValue, StringLen($szDelim)) <> $szDelim) Then $szRetValue &= $szDelim
$szRetValue &= $szStartPath & $szFindName
WEnd
EndIf
EndIf
$hFF = FileFindFirstFile($szStartPath & "*.*")
If $hFF = -1 Then Return $szRetValue
While True
$szFindName = FileFindNextFile($hFF)
If @error Then
FileClose($hFF)
ExitLoop
EndIf
If StringInStr(FileGetAttrib($szStartPath & $szFindName), "d") Then
If ($szRetValue <> "") And (StringRight($szRetValue, StringLen($szDelim)) <> $szDelim) Then $szRetValue &= $szDelim
If ($iFlag = 0) Or ($iFlag = 2) Then $szRetValue &= $szStartPath & $szFindName & "\" & $szDelim
$szRetValue &= FileListRecursive($szStartPath & $szFindName & "\", $szFileName, $iFlag, 0, $szDelim)
EndIf
WEnd
If StringRight($szRetValue, StringLen($szDelim)) = $szDelim Then $szRetValue = StringTrimRight($szRetValue, StringLen($szDelim))
If $iRetFormat = 0 Then
Return $szRetValue
Else
Return StringSplit($szRetValue, $szDelim, 1)
EndIf
EndFunc ;==>FileListRecursive