So, jetzt mal einen ausm Nähkästchen ... :tier:
Ich weiss nicht was zuerst da war, mein Wissen um die Existenz von AutoIT oder die Idee für das folgende Programm und die Suche nach einer Skriptsprache, aber jedenfalls ist folgendes Programm so ziemlich das erste, was ich in AutoIT gemacht hab. Es stammt so wie es da steht etwa vom Frühjahr 2005 als es noch keine GUI in AutoIT gab, ich glaube es war auch noch Version 2.x aktuell damals. Ich musste für mein Praktikum bei einer kleinen IT-Firma ein Programm haben, dass beim Kunden ein paar Dateien erneuert hat, wenn die denn vorhanden waren (oder so ähnlich). Dazu musste wohl die Festplatte durchsucht werden.
Heute würde ich doch so einiges anders und vllt einfacher machen, aber seht selbst:
Spoiler anzeigen
If MsgBox(36, "ZMD Updater von WirCom","Wollen Sie, dass der Assistent jetzt Ihre ZMD-Dateien updatet ? " & @CRLF & @CRLF &"Sie können den Vorgang jederzeit mit Esc abbrechen.") = 7 Then exit
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{Esc}", "Abbrechen") ; Führt bei Esc die Abfrage durch, ob das Programm abgebrochen werden soll
[/autoit] [autoit][/autoit] [autoit]$dir = @WorkingDir ; speichert den aktuellen Ordner, aus dem das Script gestartet wird, in einer Variablen $dir
Global $Searcharray[1000000] ; Das Array kann 1000000 Ordner enthalten, die durchsucht werden müssen
Global $schreiben = 1 ; Sagt der Suche, an welcher Stelle im Array der nächste Eintrag erfolgen kann (nennt also die nächste freie Stelle im Array)
Global $Update = 0 ; Über diese Variable wird festgestellt, ob überhaupt eine Datei zum ändern gefunden wurde, wird bei der Info-Box am Ende benötigt
Global $i = 0 ; Mit Hilfe dieser Variable geht die Suchfunktion Ordner für Ordner bzw. Speicherstelle für Speicherstelle des Arrays durch
Global $drive
If DriveStatus("C:\") = "READY" Then Suche("C:\") ; Wenn die Festplatte C: bereit ist, wird sie durchsucht
[/autoit] [autoit][/autoit] [autoit]If DriveStatus("D:\") = "READY" Then Suche("D:\") ; Wenn die Festplatte D: bereit ist, wird sie durchsucht
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func Suche($drive)
[/autoit] [autoit][/autoit] [autoit]$Searcharray = 0 ; Löscht das Array vor der neuen Suche
Global $Searcharray[1000000] ; Definiert das Array neu, damit wieder 1000000 Plätze zur Verfügung stehen
$schreiben = 1 ; Variable für die neue Suche auf Anfangswert zurücksetzen
$i = 0 ; Variable für die neue Suche auf Anfangswert zurücksetzen
$size = 0
$prozent = 0
FileChangeDir($drive) ; wechselt in das Hauptverzeichniss der Festplatte (hier beginnt die Suche)
$space = (DriveSpaceTotal($drive) - DriveSpaceFree($drive)) * 1048576 ; berechnet den beschriebenen Teil der Festplatte und wandelt das Ergebnis in Bytes
ProgressOn("Fortschritt - ZMD Updater von WirCom", _
"Update läuft auf Laufwerk: " & $drive, "0 Prozent fertiggestellt") ; zeigt die Fortschrittsanzeige
WinActivate ( "Fortschritt - ZMD Updater von WirCom" )
$Searcharray[0] = @WorkingDir ; setzt den ersten Platz im Array auf den aktuellen Ordner (also das Hauptverzeichnis der aktuellen Festplatte)
While $Searcharray[$i] ; Startet die Suchschleife, die alle Dateien und Ordner im Ordner durchsucht, der an der Stelle $i im Searcharray steht, beim ersten mal wäre das das aktuelle Hauptverzeichnis der Festplatte
FileChangeDir ( $Searcharray[$i] ) ; wechselt in das Verzeichniss, das an der Stelle $i im Array steht, denn darin wird gesucht
$search = FileFindFirstFile("*") ; initialisiert die Suche bzw. den Handle $search
If $search = -1 Then
MsgBox(0, "Error", "Keine Datei auf dem Laufwerk vorhanden !!!")
ExitLoop ; verlässt die aktuelle Suche, falls nicht eine Datei im Hauptverzeichniss ist
EndIf
While 1 ; Startet die "unendliche" Suche im aktuellen Ordner mit dem vorher erstellten Handle "$search"
$file = FileFindNextFile($search) ; $file enthält immer die nächste gefundene Datei/Ordner
If @error Then ExitLoop ; wenn er keine nächste findet, wird die SChleife verlassen
$size = $size + FileGetSize($file) ; Größe der insgesamt durchsuchten Dateien wird um die Größe der gerade gefundenen Datei ergänzt
$prozent = Round(($size / ($space / 100)),0) ; berechnet den Prozentanteil der schon durchsuchten Dateien am Füllstand der Festplatte und rundet den Wert auf 0 Dezimalstellen
If $prozent > 100 Then $prozent = 100
ProgressSet($prozent , $prozent & " Prozent fertiggestellt") ; aktualisiert die Fotrschrittsanzeige
If StringInStr(FileGetAttrib( $file ), "D", 0,) <> 0 Then ; Wenn der nächste gefundene Gegenstand ein Ordner ist dann...
If $file <> "." AND $file <> ".." Then ; Da die Suche bei AutoIT ab und an "." und ".." zurückliefert, müssen diese ausgeschlossen werden
If @WorkingDir <> $drive Then ; Wenn es sich beim aktuellen Ordner um C:\ handelt, so ist der Backslash schon da ( "C:\"), ...
$Searcharray[$schreiben] = @WorkingDir & "\" & $file ; -aus dem aktuellen Ordner wird ein Ordner mit seinem Pfad in Excel gespeichert
$schreiben = $schreiben + 1 ; $speichern wird um 1 erhöht, damit die nächste Angabe für den zu durchsuchenden Ordner in die nächste (also freie Speicherstelle des Arrays) gespeichert wird
Else ; Ansonsten muss er zwischen "Ordner" und "Ordner" eingefügt werden.
$Searcharray[$schreiben] = @WorkingDir & $file ; -aus dem aktuellen Ordner wird ein Ordner mit seinem Pfad in Excel gespeichert
$schreiben = $schreiben + 1 ; Ansonsten muss er zwischen "Ordner" und "Ordner" eingefügt werden.
EndIf
EndIF
Else ; Wenn der gefundene Gegenstand kein Ordner (also eine Datei ist) ...
If $file = "ZMD.EXE" AND $dir <> @WorkingDir Then ; Nur wenn es sich um die gesuchte Datei handelt, dann ...
If ProcessExists("ZMD.EXE") Then ; Wenn die ZMD.EXE noch läuft, wird sie beendet
;msgbox(4096,"Info","Bitte beenden Sie die ZMD.EXE, oder sie _
; wird in 20 Seunden geschlossen",20)
ProgressOn("ZMD.exe wird in 20 Sekunden automatisch beendet !", "Bitte " _
"beenden Sie ZMD. " , "20 Sekunden")
For $sekunden = 0 To 20
ProgressSet((5 * (20 - $sekunden)), (20 - $sekunden) & " Sekunden")
sleep(1000)
Next
ProgressOn("Fortschritt - ZMD Updater von WirCom", _
"Update läuft auf Laufwerk: " & $drive, "0 Prozent fertiggestellt")
ProcessClose ( "ZMD.EXE" )
EndIf
FileCopy ( $dir &"\ZMD.EXE", @WorkingDir&"\" ,1 ) ; Die gefundene Datei wird von der neuen überschrieben
FileCopy ($dir &"\Beitrag.def", @WorkingDir&"\" ,1 ) ; Diese Datei kommt in den selben Ordner
FileCopy ( $dir &"\export.def", @WorkingDir&"\" ,1 ) ; Diese Datei kommt in den selben Ordner
$Update = $Update + 3 ; Da 3 Dateien ersetzt/kopiert wurden, wird der Zähler um 3 erhöht
EndIf
EndIf
WEnd
FileClose($search) ; Das Suchhandle wird geschlossen
$i = $i +1 ; Die Suche nach der Datei und nach weiteren zu durchsuchenden Ordnern ist beendet, damit die Suche beim nächsten im Array vorkommenden Ordner fortgeführt wird, wird der Zähler $i um 1 erhöht.
WEnd
[/autoit] [autoit][/autoit] [autoit]ProgressSet(100 , 100 & " Prozent fertiggestellt") ; ProgressBar auf 100% stellen, da fertig
sleep(1000) ; 1 Sekunde warten, damit der Benutzer die 100% sehen kann
ProgressOff() ; Die Fortschrittsanzeige wird ausgestellt, da die Suche zu Ende ist
EndFunc
If $Update = 0 Then
MsgBox(64,"ZMD Updater von WirCom","Das Update Ihrer ZMD-Dateien wurde abgeschlossen, es wurden aber keine Dateien upgedated.")
Else
MsgBox(64,"ZMD Updater von WirCom","Das Update Ihrer ZMD-Dateien wurde erfolgreich abgeschlossen, es wurden " &$Update & " Dateien geändert.")
EndIf
Func Abbrechen()
[/autoit] [autoit][/autoit] [autoit]ProgressOff()
If MsgBox(4, "ZMD Updater von WirCom","Wollen Sie den Assistenten jetzt abbrechen ? Es wurden erst " & $Update & " Dateien upgedated.") = 6 Then exit
ProgressOn("Fortschritt - ZMD Updater von WirCom", _
"Update läuft auf Laufwerk: " & $drive, "0 Prozent fertiggestellt")
EndFunc