"?" in Ordner- bzw. Dateinamen

  • Hallo Forum

    Ich hätte wiederr mal eine Frage an Euch - ich hab ein Programm erstellt, das Bilder sucht, das Datum ausliest und dann nach JJJJ\JJJJ-MM-DD\Bildname verschiebt - also einen wirren "bildhaufen" ordnet.
    Das Programm funktioniert auch wie gewollt, aber vielleicht auch nicht? Das Ergebnis mit Dateimanagern betrachtet schaut einwandfrei aus. Standardanwendung für JPGs ist XnView, aber mit Doppelklick aufs File gestartet erscheint "Fehler beim Öffnen ...".

    TotalCommander:

    Windows-Explorer:


    Da XnView nur bei diesen Bildern spinnt, sonst aber einwandfrei funkt, hab ich mir in einigen Programm-Testläufen die Variablen (Datum, Pfade, etc.) anzeigen lassen und die sind auch OK.

    Hat vielleicht jemand eine Idee, woher die Fragezeichen kommen könnten - warum sie sonst nicht angezeigt werden oder sonstige Infos?

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

  • Ich hab ein Programm erstellt, das Bilder sucht, das Datum ausliest und dann nach JJJJ\JJJJ-MM-DD\Bildname verschiebt

    Hat vielleicht jemand eine Idee, woher die Fragezeichen kommen könnten

    Kannst Du dein Skript mal posten um nachvollziehen zu können, woher die Fragezeichen kommen ?

    Vermutlich ein Problem mit dem Zeichensatz / der Kodierung / nicht sichtbaren Sonderzeichen.

    Grundsätzliches : gewisse Zeichen sind für Ordner- und Dateinamen unter Windows nicht zulässig !

    Hier eine Quelle : https://www.itnator.net/ungueltige-zei…n-oder-ordnern/

    Auszug :

    Anbei ist eine Liste an Sonder-Zeichen, welche in Dateinamen nicht verwendet werden können. Ebenfalls kann man diese NICHT in Namen von Ordnern verwenden. Diese Zeichen sind ungültig:

    ZeichenBedeutung
    \Backslash
    /Slash
    :Doppelpunkt
    *Sternchen (Platzhalter)
    ?Fragezeichen
    Anführungszeichen
    <Kleiner als
    >Größer als
    |Pipe

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Vielleicht sind an diesen Stellen nicht darstellbare Steuerzeichen oder soetwas.
    Ich hätte spontan versucht mir die ASCII-Codes anzeigen zu lassen um zu schauen ob da irgendein Zeichen noch dazwischen ist:
    Wichtig: Skript muss hierfür in diesem Ordner liegen (Pfad manuell eintragen nützt da nichts):

    AutoIt
    #include "Array.au3"
    
    _ArrayDisplay(StringToASCIIArray(@ScriptFullPath))

    Oder vielleicht noch so:

    AutoIt
    #include <Array.au3>
    
    $sPath = "E:\test\Bilder geordnet\2023\2023-09-24"
    
    $sPfad = FileGetLongName($sPath)
    If @error Then MsgBox(0,"", "Fehler aufgetreten")
    
    _ArrayDisplay(StringToASCIIArray($sPfad))
  • Müsste dann nicht simples umbenennen funktionieren oder bekommst du dann auch eine Fehlermeldung?

    Ansonsten hatte ich den gleichen Gedanken wir AspirinJunkie: Nicht sichtbare Zeichen (ggf. bei Programmgesteuerter Umbenennung?)

  • Mein Vorschlag wäre, sich den Pfad mal in einer Befehlszeile anzeigen zu lassen. Oft sieht man hier auch entsprechende Sonderzeichen.

    Für mich stellt sich trotzdem die Frage, ob da vielleicht ein nicht sichtbares Steuerzeichen im Script enthalten ist, was die Verzeichnisse anlegt. Ich kopiere mir dazu das Script gern in Notepad++. Das zeigt alles an, wenn man es dem Programm sagt. Vielleicht taucht da ja was Ungewöhnliches aus.

  • Erst mal danke für Eure Antworten.

    Nach umfangreicheren Tests konnte ich das Problem lösen:
    Ein Test mit einer größeren Anzahl Bildern brachte dann zutage, dass das Problem nur bei bestimmten JPGs auftrat - nämlich bei denen, die ein Aufnamedatum gespeichert haben.
    Bei denen die das nicht haben (z.B. eingesannten Bilder?) hab ich - als Alternative - das Änderungsdatum herangezogen und da gabs keine Probleme (Daten ausgelesen mit _GetExtProperty).

    Das Datum wurde mit StringSplit zerteilt. Ein Versuch, die Werte dann mit int() in eine Zahl und mit string() dann zurück in einen String zu wandeln ergab den Wert "0". Es muss also tatsächlich unsichtbare Zeichen geben.
    Den vorderen Teil zu ignorieren - z.B. StringRight($jjjj, 4) - war dann die Lösung.

    Fazit: Möglicherweise ist das, was in den JPG-Daten wie ein Datum aussieht nicht zwingend nur ein Datum (da könnte noch was dran hängen?).

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

  • Fazit: Möglicherweise ist das, was in den JPG-Daten wie ein Datum aussieht nicht zwingend nur ein Datum (da könnte noch was dran hängen?).

    Wenn das eine Frage ist, dann poste bitte Dein Script (plus die von Dir verwendete UDF "_GetExtProperty"), sowie eine JPG-Datei, bei der ein "falsches" Datum zurückgegeben wird.

    Eventuell haben wir dann alle etwas von diesem Thread.

  • Ne, keine Frage, nur ein Hinweis, wo man suchen kann, falls mal jemand ähnliches vorhat oder ähnliche Probleme hat.

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.