Wieso funktioniert StringInStr nicht?

  • Hi Leute,
    um meine Dateien zu sortieren habe ich mir ein kleines Script geschrieben, das immer nach dem selben Prinzip läuft. Es geht nach und nach jede Datei im Ordner durch und soll anhand des Namens überprüfen, ob ein bestimmtes Wort enthalten ist. Die Datei soll dann in einen Ordner kopiert werden. Das funktioniert aber irgendwie nicht? Kann mir einer weiterhelfen?

    [autoit]

    While 1
    $name = FileFindNextFile("*.*")
    If StringInStr($Name, "tag") Then
    FileCopy(@ScriptDir & "\" & $name, @scriptdir & "\Alles mit Tag\" & $name, 8)
    EndIf
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Aquaplant (30. Oktober 2009 um 15:03)

  • hab noch nie mit FileFindNextFile gearbeitet, aber braucht man dazu nicht erst ein FilefindFirstFile?

    wenn du das schon drinhast, dann lass dir mal die $name nach deinem FileFindNextFile mit ner msgbox ausgeben

  • Erst Filefindfirstfile verwenden.

    [autoit]


    ; Shows the filenames of all files in the current directory
    $search = FileFindFirstFile("*.*")

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

    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop

    MsgBox(4096, "File:", $file)
    WEnd

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

    ; Close the search handle
    FileClose($search)

    [/autoit]
  • siehe mal in der hilfe ..

    Rückgabewert
    Erfolg: Gibt die Position der Unterzeichenfolge zurück.

    probiers mal mit :

    While 1
    $name = FileFindNextFile("*.*")
    $pos = StringInStr($Name, "tag")
    If $pos > 0 Then
    FileCopy(@ScriptDir & "\" & $name, @scriptdir & "\Alles mit Tag\" & $name, 8)
    EndIf
    WEnd

  • Hilfe hilft.....
    Habe nur mal das in der Hilfe als Beispiel verwendete Script um deine 3 Zeilen erweitert, funktioniert einwandfrei. Du solltest dir generell angewöhnen, erst selbst nach DEINEN Fehlern zu suchen, bevor du das Funktionieren von AutoIt-Befehlen in Frage stellst. Wenn du nicht weisst wie man in einem Script nach Fehlern sucht, empfehle ich dir die Lektüre hier.

    [autoit]

    $search = FileFindFirstFile("*.*")

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

    ; Prüfen, ob die Suche erfolgreich war
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop

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

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $name = ' & $file & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    If StringInStr($file, "tag") Then
    MsgBox(4096, "Datei:", $file)
    ;FileCopy(@ScriptDir & "\" & $name, @scriptdir & "\Alles mit Tag\" & $name, 8)
    EndIf

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

    WEnd

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

    ; Handle für Suche schliessen
    FileClose($search)

    [/autoit]
  • Hi,

    If StringInStr($Name, "tag") Then funktioniert trotzdem, weil

    Rückgabewert 0 => If Bedingung wird nicht ausgeführt da 0 = False
    Alles anderen Rückgabwerte werden als 1, also True, gewertet => If Bedingung wird ausgeführt.

    $pos würde nur benötigt, wenn Du tatsächlich die Anfangsposition des Strings zur Weiterverarbeitung benötigen würdest.

    ;-))
    Stefan

    P.S: Ich arbeite trotzdem mit der Syntax If StringInStr($Name, "tag") <> 0 Then


  • P.S: Ich arbeite trotzdem mit der Syntax If StringInStr($Name, "tag") <> 0 Then


    Und wieso?
    In Autoit "bedeutet" true 1 und false 0.
    If XY then YZ ausgeschrieben: Falls XY wahr ist dann mache YZ
    Zumindest habe ich das so verstanden.

    Einmal editiert, zuletzt von nuts (30. Oktober 2009 um 11:22)

  • Hi,

    [autoit]

    $string = "Hallo"
    If StringInStr ($string, "lo") Then
    MsgBox (0,"lo","Gefunden an pos: " & StringInStr ($string, "lo"))
    Else
    MsgBox (0,"lo","Nicht Gefunden")
    EndIf
    If StringInStr ($string, "12") Then
    MsgBox (0,"12","Gefunden")
    Else
    MsgBox (0,"12","Nicht gefunden!")
    EndIf

    [/autoit]

    MsgBox (0,"lo","Gefunden an pos: " & StringInStr ($string, "lo")) wird angezeigt, obwohl Rückgabewert = 4. In Autoit ist es tatsächlich so, dass 0 = False, alles größer 0 an Rückgabewerten wird als True interpretiert.

    ;-))
    Stefan

    P.S: Mein <> 0 ist historisch bedingter Programmiertick, ist aber tatsächlich nicht notwendig.

  • @ojo
    ich frage auch idR das <>0 ab... De Maddin würde sagen:"Sischääärr is Sischääärr!"

  • Danke für eure posts, ich benutze die englische Hilfe und hab das wohl übersehen. Es klappte aber auch ohne filefindfirstfile! Allerdings hat er sich dann nicht mehr an die Bedingung gehalten und JEDES file reinkopiert