Ordner mit laufender Nummer

  • Hallo zusammen,

    ich bin neu hier und sage erstmal allen "HALLO":rock:.

    Ich mache gerade die ersten Versuche in Autoit und könnte eure hilfe gebrauchen.

    Mein script soll folgendes können: Inbox Kundennamenabfrage, damit wir ein Ordner erstellt der Den Namen hat, dann sollte der Name das aktuelle Datum haben und dazu noch eine laufende Nummer wie z.B. P202400001.

    mein Problem ist die laufende NUmmer ich schaffe es das der Ordner richtig erstellt wird, der zweite erstellte Ordner mit gleichen NAMEN hat dann die 00002.

    Stelle ich aber einen anderen NAmen ein beginnt wieder die 00001.

    Was muss ich ändern damit die NUmmer egal was ich eingebe immer fortlaufend ist?

    Anbei mein script:

    Ist bestimmt nicht alles perfekt aber ein Anfang:-)


    Vielen Dank

    Gruß Cyb

    2 Mal editiert, zuletzt von cybexz (9. Dezember 2024 um 18:16)

  • Was muss ich ändern damit die NUmmer egal was ich eingebe immer fortlaufend ist?

    Du könntest die Nummer z.B. in eine kleine Textdatei (sinnvoll wäre eine INI-Datei) schreiben.

    Mit https://autoit.de/onlinehilfe/on…ons/IniRead.htm liest Du den aktuellen Wert, setzt den Zähler +1 (ggf. noch als String mit führenden Nullen umformatieren) und speicherst ihn mit https://autoit.de/onlinehilfe/on…ns/IniWrite.htm wieder ab.

    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."

  • Hi cybexz , willkommen im Forum 👋 .

    Musashi hat ganz recht mit der Idee eine INI zu nutzen. Ist eine von mehreren Möglichkeiten, doch in AutoIt sehr einfach und effektiv.
    Als kleine Hilfestellung könnte dieser INI Beitrag dienen. Vielleicht hilft es dir ja.

    Viele Grüße
    Sven

  • Zunächst einmal machst du auch eine doppelte Erstellung einer Variable (Zeile 5 und 8). Zeile in Zeile 5 auf 0 setzen, Zeile 8 weg lassen.
    Dann bedenke bitte, wenn dies dein komplettes Skript ist, das "Local" hier die falsche Wahl ist, sondern "Global" genutzt werden muss, da alle Variablen außerhalb einer Funktion "Global" sind.

    Dann ist der Hinweis von Musashi Gold richtig (da einfach umzusetzen).

    Dann noch das Format der Nummer, wenn du führende Nullen willst, damit die Sortierung nachher auch passt, verwende StringFormat("%05s", $iNummer), wobei die 5 hier die Anzahl der Stellen angibt.

    Ich würde zudem empfehlen eine Fehlerprüfung einzubauen für das Ordner erstellen. Wenn du dafür Hilfe brauchst wie man das machen kann, gerne einfach fragen.

    Die Frage, die ich mir noch Stelle, soll das immer nur 1mal durchlaufen und sich danach beenden oder willst du das so lange durchlaufen lassen bis der Benutzer auf "Cancel" drückt oder keine Eingabe macht (oder ein anderer Indikator zutrifft)?

  • Moin,

    weil Du Dich noch in einem frühen Stadium befindest möchte ich Folgendes anmerken:

    P202400001
    Solltest Du vorhaben, das Jahr in die Nummer aufzunehmen, wäre das 'doppelt gemoppelt', weil das Jahr ja schon im Datum steht ($sDatum = (@YEAR & "-" & @MON & "-" & @MDAY)). Außerdem musst Du dann bedenken, dass Du die laufende Nummer beim ersten Start in 2025 wieder auf 1 setzen musst.

    Wofür brauchst Du diese Nummer überhaupt?

    Grüße, Velted

  • Moin Moombas,

    Zunächst einmal machst du auch eine doppelte Erstellung einer Variable (Zeile 5 und 8). Zeile in Zeile 5 auf 0 setzen, Zeile 8 weg lassen.

    Wenn man das macht, wird die jeweils erste Datei mit 0 geschrieben. Ich glaube nicht, dass das sein soll.

    Dann bedenke bitte, wenn dies dein komplettes Skript ist, das "Local" hier die falsche Wahl ist, sondern "Global" genutzt werden muss, ...

    "muss" ist falsch, weil "Lokale" Variable im "global scope" automatisch "Global" sind. Es schafft allerdings Klarheit.

  • In etwa so?


    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Moin Moombas,

    Wenn man das macht, wird die jeweils erste Datei mit 0 geschrieben. Ich glaube nicht, dass das sein soll.

    Hmm, ich weiß was du meinst, ist aber in seinem aktuellen Skript der Fall:

    AutoIt
    ;...
    Local $iNummer = 1
    
    ; Zähle bereits existierende Ordner
    Local $iNummer = 0
    ;...

    Davon bin ich ausgegangen aber du hast Recht, soll es mit 1 beginnen, nur Zeile 5 weg lassen

    "muss" ist falsch, weil "Lokale" Variable im "global scope" automatisch "Global" sind. Es schafft allerdings Klarheit.

    Ja, daher sage ich "muss", weil man sonst durchaus sich wundern könnte das es Nebeneffekte gibt, die bei gleichen Variablennamen (global/local) auftreten können oder eben etwas sonst nicht klappt.
    Daher lieber "muss" es ordentlich definieren anstatt "kann" und dann später alles Nacharbeiten etc. bei der Fehlersuche.

    Einmal editiert, zuletzt von Moombas (9. Dezember 2024 um 12:00)

  • mein Problem ist die laufende NUmmer ich schaffe es das der Ordner richtig erstellt wird, der zweite erstellte Ordner mit gleichen NAMEN hat dann die 00002.

    Stelle ich aber einen anderen NAmen ein beginnt wieder die 00001.

    Was muss ich ändern damit die NUmmer egal was ich eingebe immer fortlaufend ist?

    Hier muss nochmal genau nachgefragt werden:
    Du möchtest die Fortzählung der Suffix-Zahl unabhängig vom Namenspräfix haben - korrekt?
    Also wenn man 2 mal "Test" als Namen wählt und 1 mal "Spaß", dann möchtest du folgende 3 Ordner:

    • Test_2024-12-09_00001
    • Test_2024-12-09_00002
    • Spaß_2024-12-09_00003

    Die noch nicht ganz geklärte Frage wäre dann noch folgende: Soll diese Nummer auch unabhängig vom Datumsteil sein?
    Also beginnt die Zählung mit jedem Datum neu oder wird sie auch datumsübergreifend fortgeführt?

    Zur Umsetzung bist du eigentlich gar nicht so weit weg gewesen bisher.
    Aktuell hast du nur die Ordner auf Existenz geprüft, welche dem aktuellen Namensschema entsprechen.
    Daher wird logischerweise nur die Höchste Nummer für diese Namen ermittelt.

    Was du also anpassen müsstest, wäre die Ermittlung der höchsten Nummer so zu gestalten, dass über alle existieren Ordner im Verzeichnis gesucht wird.
    Hier kannst du dann entweder den Datumsteil noch mit berücksichtigen - oder eben nicht - je nach dem was gewünscht ist.

    umgesetzt:

  • Guten Abend,

    ja krass seit Ihr schnell:party:.

    Nein die Zählung ist Datumsübergreifend, also quasi immer weiter.

    @AspirinJunkie hab dein file getestet ja genau so soll das laufen, bin nicht dahinter gekommen wie das bei einem Anderen Namen ist, das hast du perfekt erkannt.

    Vielen dank euch allen.

    PS wenn man es erklärt bekommt oder auch gezeigt klingt es echt logisch.

    Vielen Dank

  • Wenn sicher gestellt ist das in dem Zielordner keine anderen Verzeichnisse vorhanden sind, kann man mit _FileListToArray ($sBasisPfad, "*." ,2 ) die Anzahl der Ordner ermitteln und dadurch die nächste freie fortlaufende Nummer ermitteln.

    Bei ein paar hundert Verzeichnissen wird das egal sein, überhaupt wenn sie lokal liegen, aber wenn das mal auf einen Fileshare liegt von dem ich durch einen VPN-Tunnel auf die Firmendaten zugreiffe und dort liegen einige 10000 Ordner könnte das einen gewissen Geschwindigkeitsvorteil bringen...

    lg
    Racer

  • Wenn sicher gestellt ist das in dem Zielordner keine anderen Verzeichnisse vorhanden sind, kann man mit _FileListToArray ($sBasisPfad, "*." ,2 ) die Anzahl der Ordner ermitteln und dadurch die nächste freie fortlaufende Nummer ermitteln.

    Bei ein paar hundert Verzeichnissen wird das egal sein, überhaupt wenn sie lokal liegen, aber wenn das mal auf einen Fileshare liegt von dem ich durch einen VPN-Tunnel auf die Firmendaten zugreiffe und dort liegen einige 10000 Ordner könnte das einen gewissen Geschwindigkeitsvorteil bringen...

    lg
    Racer

    Ich würde (aber das ist meine bescheidene Meinung ohne Hintergründe zu kennen), so oder so für jeden Kunden einen Unterordner erstellen und dort dann die Dateien ablegen. Dann ist es eine saubere Ordnung und minimiert die Anzahl der Dokumente enorm die in einem Ordner liegen.

  • Bin da voll bei Dir Moombas, aber manchmal muss man sich nach der Decke strecke. So manche Vorgaben von Andere provozieren bei mir auch immer nur ein Kopfschütteln....

  • Also ich würde die Nummer einfach in eine *.ini schreiben.

    Das ist:

    1) Ordner unabhängig

    2) SpeicherMedium unabhängig

    3) Flexibel, da man jederzeit die "Start Nummer" ändern kann


    usw. usw.


    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)