Dateiendung in einem Input einlesen.

  • Hallo,

    Ich möchte gern ein Script schreiben, das in einem Ordner sucht ob eine Datei 2 mal vorhanden ist und diese danach löscht.

    Da ich nicht nur vorgegebene Dateiendungen einstellen möchte, möchte ich das der Benutzer dann auch Dateiendungen selbst über ein Input eingeben kann. Jetzt würde ich gerne wissen, wei man in einer Input überprüfen kann ob nur dateiendungen eingeben wurden. Also, ich möchte das der Benutzer die dateiendungen in dieser formatierung eingibt: *.mp3;*.wma; usw.

    hier ein beispiel:

    Spoiler anzeigen

    eingabe: *.wma;*.wav;

    ausgabe: *.wma;*.wav;

    eingabe: hugo;hallo;*

    ausgabe: Fehler bei der Eingabe

    Hoffentlich kann mir jemand helfen.

    Ich danke jetzt schonmal im voraus.

  • Hiho...

    Also habe hier ne suchfunktion mit der du einen Ordner nach bestimmten Dateiendugen durchsuchen kannst...

    Ich würde das Script ca so aufbauen...

    - Kleinen Gui der wo man die Endung u Verzeichnis auswählen kann...
    - dann die Suchfunktion benutzen... ( Unten angefügt )
    - gefundene Daten in ein Array lesen
    - dann das Array nach doppelten Namen durchsuchen...

    [autoit]

    ;##################################################################################
    ; Func: - Verzeichnis durchsuchen nach *.*
    ; Input: $current,$ext (suchverzeichnis,Fileart[z.b. doc])
    ;##################################################################################

    [/autoit][autoit][/autoit][autoit]

    Func _Search($current, $ext)

    Local $search = FileFindFirstFile($current & "\*.*")
    While 1
    Local $file = FileFindNextFile($search)
    If @error Or StringLen($file) < 1 Then ExitLoop
    If Not StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
    If StringRight($current & "\" & $file, StringLen($ext)) = $ext Then
    ;MsgBox(0, "Dateiendung " & $ext, $current & "\" & $file)
    ; Hier kopieren, löschen, umbennen etc.
    _ArrayAdd($found_A, $current & "\" & $file)
    ;_ArrayDisplay ($found_A)
    EndIf
    EndIf

    $found_A[0]= UBound ($found_A)-1

    If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
    _Search($current & "\" & $file, $ext)
    EndIf
    WEnd
    FileClose($search)
    ToolTip ( '')
    EndFunc ;==>Search

    [/autoit]

    Ist mal so ne Grundidee

    MFG chris :!:

  • Ok, thx, für deine Hilfe.

    das mit dem Suchen würde ich schon zusammenbringen hoffentlich^^

    Aber trotzdem danke für deine Hilfe.

    ich würde nur gern wissen, wie ich die Datentypen von einem Input erkennen kann. Ich weis das es mit StringRegExp funktioniert, aber ich weis leider nicht wie ich das machen soll. Ich habe mich schon länger damit beschäftigt, aber habe es nocht nicht geschafft.

  • Endung bekommt man auch so raus...

    [autoit]

    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    $input = 'C:\WINDOWS\system32\NOTEPAD.exe'

    [/autoit][autoit][/autoit][autoit]

    If StringInStr ( $input , '.') = True Then
    $input_array = StringSplit ( $input , '.')
    ;_ArrayDisplay ( $input_array )
    $endung = '.'&$input_array[$input_array[0]]
    EndIf

    [/autoit][autoit][/autoit][autoit]

    MsgBox ( 0, "",$endung)

    [/autoit]

    MFG chris :!:

  • Deine Ursprüngliche Frage kann so gelöst werden:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    ;$string = "*.wma;*.mp4;*.123447hb;*.gg;"
    While 1
    $string = InputBox("Endungen:","Bsp: *.wma;*.mp4;*.123447hb;*.gg")
    If @error Then Exit
    If StringRegExp($string,"\A(\*\.[^;]*?;)*(\*\.[^;]*;?)\Z") Then
    MsgBox(0, '', "Valid!")
    $ar = StringSplit(StringTrimRight($string,(StringRight($String,1)=";")),";") ; String in Array splitten, wenn letztes Zeichen ; dann entfernen
    _ArrayDisplay($ar)
    Exit
    Else
    MsgBox(0, '', "Not Valid!")
    EndIf
    WEnd

    [/autoit]
  • THX, wirklich ein riesen THX an progandy!!

    hat mir sehr geholfen.

    wünsche euch noch ein schönes wochenende fals ich mich nicht mehr melde^^