Dateien mit bestimmten Endungen löschen

  • Habs gerade nochmal geprüft, scheint alles zu stimmen. Die UND-Verknüpfung spinnt allerdings irgendwie.
    "If Keyword must have a thenstatement"
    Wenn ich allerdings das nach dem and wegnehmen, Funktionierts auch nicht. Er löscht gar nichts.

    Spoiler anzeigen
    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"
    $a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)

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

    For $i = 1 To $a345
    if not $a345[$i]="D:\nicht löschen\1.345" and if not $a345[$i]="D:\nicht2\2.345" then
    FileDelete($a345[$i])
    EndIf
    Next

    [/autoit]
  • Das muss schon "And" bleiben...

    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"
    $a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)

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

    For $i = 1 To $a345
    if ($a345[$i] <> "D:\nicht löschen\1.345") and ($a345[$i] <> "D:\nicht2\2.345") Then _
    FileDelete($a345[$i])
    Next

    [/autoit]
  • [autoit]

    $a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)

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

    For $i = 1 To $a345
    If Not (($a345[$i] = "D:\nicht löschen\1.345") or ($a345[$i] = "D:\nicht2\2.345")) Then
    FileDelete($a345[$i])
    EndIf
    Next

    [/autoit]
  • Geht beides :D

    Nee, wenn bei

    [autoit]

    ($a345[$i] <> "D:\nicht löschen\1.345")

    [/autoit]


    True als ergebnis kommt, dann kann der 2. Wert trotzdem False sein. Die Datei wird dann gelöscht wenn der Eintrag <> $a345[$i] ist, aber der 2. = $a345[$i].
    Muss And sein.

    /Edit, was geht jetzt ab? :D
    Ezorra, dein Beispiel ist falsch :)

    Einmal editiert, zuletzt von anno2008 (8. Oktober 2010 um 00:31)

  • Schnitzel macht aber eine If not ... = ... or if not ... = ... Abfrage
    Also nur wenn der zu untersuchende String nicht einem der beiden Blacklist-Strings entspricht wird die Datei gelöscht.
    So wars doch auch verlangt? Oder sollte ich ins Bett? ^^

    Einmal editiert, zuletzt von nuts (8. Oktober 2010 um 00:41)

  • not $a345[$i]="D:\nicht löschen\1.345" ist in dem Fall doch das selbe wie $a345[$i] <> "D:\nicht löschen\1.345"

    Bei Schnitzel würde das dann heißen
    entweder muss der erste String ungleich sein oder der zweite muss ungleich sein.

    Wenn der erste String ungleich ist, dann ist die Bedingung schon erfüllt, obwohl der zweite noch gleich sein kann.

    Der erste String muss ungleich sein und der zweite muss ungleich sein.

  • [autoit]

    dim $a345[3]
    $a345[0]="D:\nicht löschen\1.345"
    $a345[1]="D:\nicht2\2.345"
    $a345[2]="Treffer"
    for $i = 0 To 2
    if not $a345[$i]="D:\nicht löschen\1.345" or not $a345[$i]="D:\nicht2\2.345" then
    MsgBox(1, "", $a345[$i])
    EndIf
    Next

    [/autoit]

    Gibt gar keinen Treffer? ?(
    Naja morgen gehts weiter :D
    Der Weg von anno2008 stimmt mal auf jeden Fall.

    Einmal editiert, zuletzt von nuts (8. Oktober 2010 um 01:08)

  • [autoit]

    Dim $a345[3]
    $a345[0] = "D:\nicht löschen\1.345"
    $a345[1] = "D:\nicht2\2.345"
    $a345[2] = "Treffer"
    For $i = 0 To 2
    If not (($a345[$i] = "D:\nicht löschen\1.345") or ($a345[$i] = "D:\nicht2\2.345")) Then
    MsgBox(1, "", $a345[$i])
    EndIf
    Next

    [/autoit]

    Nimm halt mein Falsches laut anno sollang es Funktioniert und eigendlich schon richtig ist ^^


    Zur Erklärung on If Not or
    If = Wenn

    If True ist das Richtige ergebniss

    Alle danachfolgende überprüfungen müssen also auf True or False enden

    Not ( nicht ) hat die eigenschaft das es sich nicht wie IF auf die danachfolgende werte setzt sondern die If abbricht mit dem ersten Parameter

    Also

    if not $a345[$i]="D:\nicht löschen\1.345"

    Ist Immer True

    warum ? Weil $a345[$i] deklariert ist

    Richig muss es nach Not in Klammern gehalten werden

    If Not ( die überprüfungen )

  • Das was du sagst stimmt leider nicht.
    Das "not" bezieht sich nur auf die 1. Abfrage.

    "OR" ist nur False wenn A und B False sind.

    Bei dir würde das heißen wenn A<>Pfad1 und B=Pfad2.
    Die Datei wird gelöscht wenn B dem Pfad entspricht???
    Genau das Gegenteil soll erreicht werden :).

    2 Mal editiert, zuletzt von anno2008 (8. Oktober 2010 um 01:25)

  • Stimmt

    Die erste abfrage bei

    If Not $blabla = "huhu"

    ist aber

    If Not $blabla

    und bedeutet soviel wie wenn $blabla nicht deklariert dann

    Um es richtig zu haben musst du If Not ($blabla = "huhu")

    Bsp:

    [autoit]

    Global $Variable1

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

    If $Variable1 Then
    MsgBox(0, "", "varable 1 deklariert")
    EndIf

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

    If Not $Variable1 Then
    MsgBox(0, "", "varable 1 nicht deklariert")
    EndIf

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

    $Variable1 = "hallo"

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

    If $Variable1 = "hallo" Then
    MsgBox(0, "", "varable 1 = hallo")
    EndIf

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

    If Not $Variable1 = "SternenKrieger" Then
    MsgBox(0, "", "( not ohne klammer ) varable 1 nicht = SternenKrieger")
    EndIf

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

    If Not ($Variable1 = "SternenKrieger") Then
    MsgBox(0, "", "varable 1 nicht = SternenKrieger")
    EndIf

    [/autoit]


    *Edit

    Probier mein beispiel das du siehst das du grade einen "Denkkollaps" hast

    Aus oben habe ich das funktionierende mit msg gepostet also schaus dir bitte an befor ddu sagst es stimmt nicht obwohls stimmt^^

    *Edit 2

    If not (($a345[$i] = "D:\nicht löschen\1.345") or ($a345[$i] = "D:\nicht2\2.345")) Then


    das bedeutet soviel wie

    Wenn Nicht ((True) oder (True)) Dann
    Löschen

    Von daher stimmt meines auch im gedankengang und wie du siehst auch praktisch

    Auf deutsch

    Wenn , nicht, dass stimmt, oder, dass stimmt, dann

    3 Mal editiert, zuletzt von Ezzora (8. Oktober 2010 um 01:36)

  • Ups sry um die logischen Operatoren hab ich mir keine Gedanken gemacht.
    Ich hatte nur das 2te überflüssige if entfernt das mein Vorposter drinnen hatte.

    Die Bedingung war also nicht ganz richtig^^

  • Da habe ich ja was angerichtet :D
    Danke für eure Gedanken zu meinem Problem.
    Ich dachte mir jetzt aber, dass ich etwas umstrukturiere.
    Ich bräuchte die UND-Verknüpfung nicht. Die eine Datei
    kann ich auch so sichern, dass sie nicht gelöscht wird.

    Aber selbst eine einfach Abfrage klappt bei mir nicht.
    Das ist doch zum Mäuse melken :cursing:

    Dieses eine Verzeichnis soll stehen bleiben. Nichts weiter.

    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"

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

    $a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)

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

    For $i = 1 To $a345
    if $a345[$i] = "D:\nicht löschen\*.345" then
    FileDelete($a345[$i])
    EndIf
    Next

    [/autoit]
  • JEtzt nervst langsam, obn hab ich dir eine funktionierende gemacht und nun willste doch ne andere -.-

    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"

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

    $a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0) ;weiss imme noch nicht wie die daten zurückgegeben werden

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

    ;wenn sie als array beginnend bei 0 zurückgegebene werden sollte $i = 0 sein
    ; wenn 0 allerdings die sammlung ist sollte es For $i = 1 To $a345[0] sein

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

    For $i = 1 To $a345
    if not StringInStr($a345[$i],"D:\nicht löschen\") then
    FileDelete($a345[$i])
    EndIf
    Next

    [/autoit]

    2 Mal editiert, zuletzt von Ezzora (8. Oktober 2010 um 08:57)

  • Warum sollt sich einer die Köpfe einschlagen? es gibt immer verschedenste wege zum Ziel und da meiner funktinierte und auch meines erachtens ein sehr logischer war hab ich gewonnen :)