Hallo zusammen.Ich habe ein Skript geschrieben, das vereinfacht gesagt Dateien aus C:\ in ein Verzeichnis auf F:\ kopieren soll. Soweit, so einfach. Neben den Dateien im Quellpfad sind auch noch Unterordner vorhanden, in denen sich auch Dateien befinden, die aber nicht mit kopiert werden sollen. Das Skript kopiert aber auch alle Dateien aus den Unterverzeichnissen mit. Ich kann das per setzen von Parametern ja nichtmal unterbinden!
Kann ich das irgendwie unterbinden?
C
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <GuiStatusBar.au3>
#include <GUIConstantsEx.au3>
#include <ScreenCapture.au3>
#include <File.au3>
#include <GUIListView.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
Global $datei_pfad = "C:\Users\Public\Documents\SSEC\Data"
Global $adatei_eingelesen
Global $aalle_dateien_in_pfad
Dim $arechenearray[1][2]
Global $rechenvariable
Global $qoutientenzaehler
Global $durchschnittswert
Global $minimalwert = 999 ;dummywert für die Vergleichsroutine. Ansonsten würde beim Vergleich nichts in die Variable geschrieben werden können
Global $maximalwert = 0 ; hier dasselbe wie bei $minimalwert
Global $datei_minimalwert
Global $datei_maximalwert
Global $pfad_imc_wti = "E:\IMC_WTI_40_nm"
Global $pfad_htu21 = "E:\HTU21"
Global $pfad_fir = "E:\FIR"
Global $pfad_wti_cu = "E:\WTi_Cu_WTi_stack"
Global $wert_produkt
Global $wert_los_id
Global $aalle_dateien_in_quellpfad
#Region ### START Koda GUI section ### Form=C:\Users\ihangebr\Desktop\AutoIt\Durchschnittswerte\durchschnittswerte.kxf
$form_aetzzeitberechnung = GUICreate("Ätzzeitberechnung", 601, 361, 776, 357)
$statusbar_unten = _GUICtrlStatusBar_Create($form_aetzzeitberechnung)
;~ $btn_pfad_waehlen = GUICtrlCreateButton("Pfad wählen", 296, 376, 155, 33)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$label_durchschn_aetzzeit = GUICtrlCreateLabel("Avrg. Ätzzeit:", 16, 168, 80, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$label_min_aetzzeit = GUICtrlCreateLabel("Minimale Ätzzeit:", 16, 192, 99, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$label_max_aetzzeit = GUICtrlCreateLabel("Maximale Ätzzeit:", 16, 240, 102, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$btn_werte_berechnen = GUICtrlCreateButton("Kopieren und berechnen", 8, 120, 219, 33)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$label_wert_durchschn_aetzzeit = GUICtrlCreateLabel("keine Daten", 120, 168, 62, 17)
$label_wert_min_aetzzeit = GUICtrlCreateLabel("keine Daten", 120, 192, 62, 17)
$label_wert_max_aetzzeit = GUICtrlCreateLabel("keine Daten", 120, 240, 62, 17)
$label_eingelesener_pfad = GUICtrlCreateLabel("Eingelesener Pfad:", 16, 296, 111, 17)
GUICtrlSetFont(-1, 9, 800, 0, "MS Sans Serif")
$label_wert_eingelesener_pfad = GUICtrlCreateLabel("keine Daten", 152, 296, 430, 17)
$list_verarbeitete_dateien = GUICtrlCreateListView("Dateiname |Ätzzeit in Sek.", 272, 27, 313, 253)
$label_verarbeitete_dateien = GUICtrlCreateLabel("Verarbeitete Dateien", 272, 8, 101, 17)
$label_angemeldeter_benutzer = GUICtrlCreateLabel("Angemeldeter Benutzer:", 16, 320, 139, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$label_wert_angemeldeter_benutzer = GUICtrlCreateLabel("-/-", 152, 320, 50, 17)
$label_min_gefunden = GUICtrlCreateLabel("Min. gefunden in:", 16, 208, 86, 17)
$label_max_gefunden = GUICtrlCreateLabel("Max. gefunden in:", 16, 256, 89, 17)
$label_datei_max_aetzwert = GUICtrlCreateLabel("keine Daten", 120, 256, 150, 17)
$label_datei_min_aetzwert = GUICtrlCreateLabel("keine Daten", 120, 208, 150, 17)
$edit_losnummer = GUICtrlCreateInput("Losnummer eingeben", 8, 27, 121, 21)
$label_losnummer = GUICtrlCreateLabel("Losnummer", 8, 8, 58, 17)
$combo_produkt = GUICtrlCreateCombo("Produkt wählen", 8, 84, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "IMC_WTI_40_nm|HTU21|FIR|WTi_Cu_WTi_stack")
$label_produkt = GUICtrlCreateLabel("Produkt wählen", 8, 64, 78, 17)
GUISetState(@SW_SHOW)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetData($label_wert_angemeldeter_benutzer, @UserName)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btn_werte_berechnen
_kopieren()
EndSwitch
WEnd
Func _kopieren() ;kopiert Daten und erstellt dabei, falls notwendig, neue Verzeichnisse
_werte_abfragen()
$aalle_dateien_in_quellpfad = _FileListToArray($datei_pfad)
If $wert_los_id = "Losnummer eingeben" Then ;überprüft ob eine Los-ID angegeben wurde. Falls nicht, wird eine Meldung ausgegeben
MsgBox(1, "Keine Los-ID angegeben", "Es wurde keine Los-ID angegeben. Kopiervorgang nicht beendet. Bitte Los-ID angeben!")
ElseIf $wert_produkt = "Produkt wählen" Then ;überprüft ob ein Produkt gewählt wurde. Falls nicht, wird eine Meldung ausgegeben. Falls ID und Produkt gewählt wurden, wird der Kopiervorgang gestartet
MsgBox(1, "Kein Produkt gewählt", "Es wurde kein Produkt gewählt. Kopiervorgang nicht beendet. Bitte Produkt wählen!")
Else
For $i = 0 To UBound($aalle_dateien_in_quellpfad) - 1
FileCopy($datei_pfad & "\" & $aalle_dateien_in_quellpfad[$i], "E:\" & $wert_produkt & "\" & @MON & "." & @YEAR & "\" & $wert_los_id & "\", 8) ;kopiert alle Daten aus dem Quellverzeichnis in das Zielverzeichnis
Next
_werte_berechnen()
EndIf
EndFunc ;==>_kopieren
Func _werte_berechnen()
$aalle_dateien_in_pfad = _FileListToArray($datei_pfad, "*", 1) ;liest alle Dateien aus dem Pfad in ein Array ein
For $i = 1 To UBound($aalle_dateien_in_pfad) - 1 ; sofern bei 0 angefangen wird zu zählen, kommt es zu einem Fehler!!!
Local $filter_avi = StringInStr($aalle_dateien_in_pfad[$i], "avi", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 3) ;sucht in dem aktuellen String nach "avi" und . avi-Dateien sollen nicht verarbeitet werden, daher ist diese Info wichtig
Local $filter_db = StringInStr($aalle_dateien_in_pfad[$i], "db", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 2) ;für thumb.db
If $filter_avi < 1 And $filter_db < 1 Then ; wird nur ausgeführt, sofern diese Datei keine .avi und keine .db ist
$adatei_eingelesen = FileReadToArray($datei_pfad & "\" & $aalle_dateien_in_pfad[$i]) ;liest die Textdatei in das Array
Local $aetzwert = StringLeft($adatei_eingelesen[UBound($adatei_eingelesen) - 1], 3) ;extrahiert den Ätzwert aus der letzten Zeile der eingelesenen Datei
$rechenvariable = $rechenvariable + $aetzwert
$qoutientenzaehler = $qoutientenzaehler + 1
$arechenearray[UBound($arechenearray) - 1][0] = $aalle_dateien_in_pfad[$i]
$arechenearray[UBound($arechenearray) - 1][1] = $aetzwert ;schreit die Ätzwerte in das Rechenarray
ReDim $arechenearray[UBound($arechenearray) + 1][2]
EndIf
Next
_ArrayDelete($arechenearray, UBound($arechenearray) - 1) ; löscht den letzten Arrayeintrag (der = 0 ist) damit die Minimalwertberechnung vernünftig abgearbeitet werden kann
For $i = 0 To UBound($arechenearray) - 1
;Minimalwert
If $arechenearray[$i][1] < $minimalwert Then
$minimalwert = $arechenearray[$i][1] ;schreibt den Minimalwert aus dem Array in die Variable
$datei_minimalwert = $arechenearray[$i][0] ;schreibt den Dateinamen mit dem Minimalwert aus dem Array in die Variable
EndIf
;Maximalwert
If $arechenearray[$i][1] > $maximalwert Then
$maximalwert = $arechenearray[$i][1] ; wie oben, nur mit dem Maximalwert
$datei_maximalwert = $arechenearray[$i][0] ;wie oben, nur mit Datei mit Maximalwert
EndIf
Next
; Durchschnittswert
$durchschnittswert = Round($rechenvariable / $qoutientenzaehler, 2)
_label_aktualisieren()
_listview_update() ; löscht den vorherigen inhalt aus dem listview
; Setzt alle Rechenvariablen wieder zurück
$datei_minimalwert = ""
$datei_maximalwert = ""
$durchschnittswert = 0
$minimalwert = 999 ;standarddummywerte
$maximalwert = 0
$qoutientenzaehler = 0 ;Setzt den Qoutientenzähle auf 0 zurück
$rechenvariable = 0 ;setzt die Rechenvariable nach jedem Rechenvorgang wieder auf 0 zurück
ReDim $arechenearray[1][2] ; setzt das rechenarray nach jeder Berechnung wieder zurück
EndFunc ;==>_werte_berechnen
Func _pfad_waehlen() ; Mit dieser Funktion, wird der Ordner manuell geladen, der gelesen werden soll und wo die Durchschnittswerte der Ätzzeiten in den Dateien berechnet werden sollen
Local Const $sMessage = "Ordner zum Einlesen wählen"
Local $gewaehlter_ordner = FileSelectFolder($sMessage, "")
If @error Then
MsgBox(1, "Kein Ordner ausgewählt", "Kein Ordner gewählt, Durchschnittswerte werden nicht berechnet!")
Else
$datei_pfad = $gewaehlter_ordner
;~ MsgBox(1,1, $datei_pfad)
EndIf
GUICtrlSetData($label_wert_eingelesener_pfad, $datei_pfad)
EndFunc ;==>_pfad_waehlen
Func _label_aktualisieren()
GUICtrlSetData($label_wert_durchschn_aetzzeit, $durchschnittswert & " Sek.")
GUICtrlSetData($label_wert_min_aetzzeit, $minimalwert & " Sek.")
GUICtrlSetData($label_wert_max_aetzzeit, $maximalwert & " Sek.")
GUICtrlSetData($label_datei_min_aetzwert, $datei_minimalwert)
GUICtrlSetData($label_datei_max_aetzwert, $datei_maximalwert)
GUICtrlSetData($label_wert_eingelesener_pfad, $datei_pfad)
EndFunc ;==>_label_aktualisieren
Func _listview_update() ; updated das LisView wenn Änderungen am Array und damit dem ListView vorgenommen wurden
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($list_verarbeitete_dateien))
_GUICtrlListView_AddArray($list_verarbeitete_dateien, $arechenearray)
;~ _ArrayDisplay($arechenearray)
EndFunc ;==>_listview_update
Func _werte_abfragen()
$wert_los_id = GUICtrlRead($edit_losnummer);Holt die Daten aus dem Controls ab
$wert_produkt = GUICtrlRead($combo_produkt)
EndFunc ;==>_werte_abfragen
Alles anzeigen