Number in String

  • Ich hab versucht dieses Script von Musashi

    AutoIt
    Local $sFolder, $sDelFolder
    $sFolder    = "2022-02-06"
    $sDelFolder = String(Number(StringMid($sFolder, 1, 4) - 1)) & '-' & StringMid($sFolder, 6, 2) & '-' & StringMid($sFolder, 9, 2)
    MsgBox(4096, "", "Verzeichnis = " & $sFolder & @CRLF & "Entfernen  = " & $sDelFolder & @CRLF)

    so umzubauen

    AutoIt
    Local $sFolder, $sDelFolder
    $sFolder    = "2022-02-06"
    $sDelFolder = String  & StringMid($sFolder, 1, 4) & '-' & (Number (StringMid($sFolder, 6, 2) +1))& '-' & StringMid($sFolder, 9, 2)
    MsgBox(4096, "", "Verzeichnis = " & $sFolder & @CRLF & "Entfernen  = " & $sDelFolder & @CRLF)

    Hat natürlich nicht funktioniert - die MsgBox bleibt unter "Entfernen" leer, es wird auch kein Syntax error angezeigt. ;(

  • Moin,

    würdest Du bitte mal beschreiben, welche Inhalte Du in den in folgender Zeile auf der rechten Seite des = mit & verknüpften Bereichen erwartest?

    AutoIt
    $sDelFolder = String & StringMid($sFolder, 1, 4) & '-' & (Number (StringMid($sFolder, 6, 2) +1))& '-' & StringMid($sFolder, 9, 2)

    (Ich sehe insgesamt 6 Bereiche).

  • (ich bleibe mal bei dem bisherigen Aufbau - es geht auch anders)

    Wenn Du +1 auf den Monat addieren möchtest, dann :

    AutoIt
    Local $sFolder, $sDelFolder
    $sFolder = "2022-02-06"
    $sDelFolder = StringMid($sFolder, 1, 4) & '-' & StringFormat("%02s", String(Number (StringMid($sFolder, 6, 2) + 1)  )) & '-' & StringMid($sFolder, 9, 2)
    MsgBox(4096, "", "Verzeichnis = " & $sFolder & @CRLF & "Entfernen = " & $sDelFolder & @CRLF)

    hpb : EDIT : So ginge es auch :

    AutoIt
    Local $sFolder = "2022-02-06" , $aFolder, $sDelFolder
    $aFolder = StringRegExp($sFolder, '(\d{4})-(\d{2})-(\d{2})$', 3)
    $sDelFolder = StringFormat('%04s-%02s-%02s', $aFolder[0], $aFolder[1] + 1, $aFolder[2])
    MsgBox(4096, "", "Verzeichnis = " & $sFolder & @CRLF & "Entfernen  = " & $sDelFolder & @CRLF)

    Falls Du sauber mit Datumswerten 'rechnen' möchtest, dann wären aber die Funktionen der <Date.au3> die bessere Wahl.

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

    2 Mal editiert, zuletzt von Musashi (27. April 2022 um 06:38) aus folgendem Grund: typo

  • Eine weitere Möglichkeit wäre, wie bereits angesprochen, die <Date.au3> , Beispiel :

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

  • Musashi

    AutoIt
    Local $sFolder, $sDelFolder
    $sFolder = "2022-02-06"
    $sDelFolder = StringMid($sFolder, 1, 4) & '-' & StringFormat("%02s", String(Number (StringMid($sFolder, 6, 2) + 1)  )) & '-' & StringMid($sFolder, 9, 2)
    MsgBox(4096, "", "Verzeichnis = " & $sFolder & @CRLF & "Entfernen = " & $sDelFolder & @CRLF)

    Das kann ich nachvollziehen - aber warum muss StringFormat("%02s", String(Number (StringMid($sFolder, 6, 2) + 1) ))

    gesetzt werden?

  • Das kann ich nachvollziehen - aber warum muss StringFormat("%02s", String(Number (StringMid($sFolder, 6, 2) + 1) )) gesetzt werden?

    Weil Number  aus dem Monatsstring 02 eine 2 macht (also bei Monaten 01 bis 09).

    StringFormat("%02s", String(... sorgt dafür, dass einstellige Monate wieder eine führende Null erhalten.

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

  • hpb :

    Da deine relevanten Unterverzeichnisse offenbar immer eine Datumsnotation (Jahr-Monat-Tag) als Name erhalten, möchte ich noch mal auf meinen Beitrag #4 verweisen (also die Verwendung von Date.au3).

    Geht man die Sache rein rechnerisch an, so würde aus Monat 2 (Februar) MINUS 3 (Monate) nicht 11 (November) herauskommen, sondern -1.

    Die Funktion _DateAdd rechnet hingegen kalendarisch sauber !

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

  • Musashi

    Du hast natürlich recht mit _DateAdd.

    Wie lässt sich das Ergebnis von $sNewDate als weitere Bedingung in die Zeile

    If FileExists("E:\Test") And StringInStr(FileGetAttrib("E:\Test"), 'DC') And Ergebnis von $sNewDate Then

    einbauen?

    Dank für Deine Hilfe

  • Welche Bedingung willst du denn da prüfen? Wenn ich es richtig verstehe willst du das ja nicht als Bedingung haben, sondern nur als Ordnernamen einbauen

    AutoIt
    $sFolder = 'E:\Test\' & $sNewDate
    If StringInStr(FileGetAttrib($sFolder), 'DC') then
        ;Ordner
    Else
        ;nicht vorhanden oder Datei
    Endif

    Einmal editiert, zuletzt von Moombas (27. April 2022 um 09:59)

  • And Ergebnis von $sNewDate Then

    ????

    Du solltest dich mal entscheiden, wie deine Ordner nun tatsächlich heißen, "E:\Test" oder "...\2022-02-06".

    Ich vermute, dass du die Attributprüfung auf den Ordner "Datum" durchführen möchtest, dann brauchst du doch das Geschwurbel davor nicht.

    1. Mit _DateAdd den gewünschten Ordnernamen generieren

    2. Mit FileGetAttrib diesen Ordner auf die gewünschten Attribute prüfen, was automatisch die Prüfung auf dessen Existenz beinhaltet! FileExists ist überflüssig!

  • BugFix

    Hast ja recht daher das ganze mal von vorne:

    Ich habe mit Eurer Hilfe folgendes Script gebastelt:

    If FileExists("E:\taegl_Backup_P1\2022-02-06") And StringInStr(FileGetAttrib("E:\taegl_Backup_P1\2022-02-06"), 'DC') Then

    Run (@ComSpec & ' /k robocopy.exe "' & ("E:\taegl_Backup_P1\2022-02-06\D$") & '" "' & ("E:\jaehrl_Backup\2022\2022-02") & '" /E /XO', @SystemDir)

    EndIf

    Damit sind Bedingung 1 und Bedingung 2 erfüllt.

    Wie kann ich die Bedingung 3 einfügen?

    If FileExists("E:\taegl_Backup_P1\2022-02-06") And StringInStr(FileGetAttrib("E:\taegl_Backup_P1\2022-02-06"), 'DC') And (Bedingung 3) Then

    Bedingung 1: Existiert der Ordner If FileExists("E:\taegl_Backup_P1\2022-02-06")

    Bedingung 2: Prüfe ob dieser Ordner die Attribute DC hat (FileGetAttrib("E:\taegl_Backup_P1\2022-02-06"), 'DC')

    Bedingung 3: Existiert der Ordner ("E:\jaehrl_Backup\2022\2022-03")

    Ich möchte dafür ("E:\jaehrl_Backup\2022\2022-02" +1) nutzen

  • Die +1 soll den Tag oder den Monat hochzählen? Ich gehe von Tag aus. Wie mehrfach bereicts gesagt ist das erste Fileexist egal, also:

    AutoIt
    ;Ungetestet! und auf Basis der vorherigen Posts.
    $sOldDate = '2022-02-06'
    $sNewDate = StringReplace(_DateAdd('D', 1, $sOldDate), "/", "-")
    If StringInStr(FileGetAttrib("E:\jaehrl_Backup\2022\" & $sOldDate), 'DC') and _
       StringInStr(FileGetAttrib("E:\jaehrl_Backup\2022\" & $sNewDate), 'DC') then
        ;Ordner
    Else
        ;nicht vorhanden oder Datei
    Endif

    Tipp: Die Jahreszahl müsstest du am bestendann auch dynamisch setzen.

  • Moombas

    Ich brauche IfFileExists!

    Ich möchte z.B. ("E:\\taegl_Backup_P1\2022-02-06"), ("E:\Server\taegl_Backup_P1\2022-02-19") und

    ("E:\Server\taegl_Backup_P1\2022-02-29") nacheinander nach ("E:\jaehrl_Backup\2022\2022-02") kopieren.

    Mit

    If FileExists("E:\taegl_Backup_P1\2022-02-06") And StringInStr(FileGetAttrib("E:\taegl_Backup_P1\2022-02-06"), 'DC') Then

    habe ich die Bedinungen 1 und 2 erfüllt.

    Das mit dem _AddDate habe ich hofentlich begriffen, aber unabhängig davon - wie füge ich den Nachweis von

    ("E:\jaehrl_Backup\2022\2022-03") als weitere Bedingung ein?

    If FileExists("E:\taegl_Backup_P1\2022-02-06") And StringInStr(FileGetAttrib ("E:\taegl_Backup_P1\2022-02-06"), 'DC') And (Bedingung 3) Then

    Das ist für mich wichtig, da ich erst dann die die Ordner aus dem taegl_Backup_P1-Monat 02 nach jaehrl_Backup_P1-Monat 02 kopiere wenn ("E:\jaehrl_Backup\2022\2022-03") existiert - d.h. der Monat 02 ist vorbei, also mache ich mein Backup.

    Gruß HP

  • hpb

    Also hier zeigt sich ein Kommunikationsproblem. Du kommst mit immer neuen Bedingungen um die Ecke. Das lässt eine saubere Lösung gar nicht zu.

    Definiere bitte bis zum Ende deiner geplanten Arbeitskette alle Operationen. Nicht das wieder nach Lösung eines Problems das Problem erweitert wird.

    Und nochmal in der Hoffnung das du es verinnerlichst: Wenn du FileGetAttrib verwendest ist FileExists sinnlos!!

    DARUM:

    AutoIt
    Func _Bla($_path)
        Local $sAttrib = FileGetAttrib($_path)
        If @error Then Return ; --> Ordner existiert nicht !!!
        ; ...
  • hpb

    Das mit dem _AddDate habe ich hofentlich begriffen, aber unabhängig davon - wie füge ich den Nachweis von

    ("E:\jaehrl_Backup\2022\2022-03") als weitere Bedingung ein?

    Das habe ich dir doch gezeigt (jetzt geändert auf Monat):

    AutoIt
    ;Ungetestet! und auf Basis der vorherigen Posts.
    $sOldDate = '2022-02-06'
    $sNewDate = StringReplace(_DateAdd('M', 1, $sOldDate), "/", "-")
    If StringInStr(FileGetAttrib("E:\jaehrl_Backup\2022\" & $sOldDate), 'DC') and _
       StringInStr(FileGetAttrib("E:\jaehrl_Backup\2022\" & $sNewDate), 'DC') then
        ;beide Ordner existieren
    Else
        ;mind. 1 Ordner existiert nicht
    Endif

    du kanst Das natürlich auch in mehrere if-Abfragen kapseln, je nachdem in wie weit du die einzelne Auswertung per Fehlermeldung ausgeben willst/musst:

    Zudem würde ich wie gesagt die Jahreszahl auch dynamisch machen:

    Wobei das ganze doppelt ist, sprich die Jahreszahl ist 2mal enthalten.

    Warum nicht: E:\jaehrl_Backup\Jahr\Monat\ ?

    Das wäre dann z.B. $oldMonth = StringSplit($sOldDate, '-')[2]

  • Guten Morgen,

    Dank für eure Hilfe, um weitere Missverständnisse - durch meine unpräzisen Angaben - auszuschließen, schließe ich das Thema und beginne noch mal von vorne.

    Gruß HP

  • und beginne noch mal von vorne.

    Ein Tipp:

    Schildere NICHT wie DU es machen möchtest - das ist die Ursache des oft zitierten XY-Problems.

    Gehe absolut neutral, gewissermaßen als Außenstehender, an die Sache heran und liste auf

    - Ausgangssituation (Datenlage etc.)

    - Zielsituation

    - zu beachtende Randbedingungen

    Dann sind Lösungsvorschläge möglich, die u.U. überhaupt nichts mit deinen Gedankengängen zu tun haben, aber effektiv zur Lösung führen.