Beiträge von Moombas

    Erneut: das Fileexists kannst du weg lassen.


    Warum du das kompliziert mit Stringmid machst anstatt StringTrimRight("E:\taegl_Backup_P1\2022-02-06", 3) weiß ich nicht, da du dann unabhängig vom vorangehenden Pfad bist, die Ordnernamen bezüglich Datum aber immmer gleich ist und du bei einem geänderten Speicherort sicherer wärst.


    Du hast doch den Path in deiner MsgBox schon zusammen gebaut, das brauchst du nur übernehmen:

    DirRemove($String & $sNewDate)

    Aber das ist definitiv Falsch, denn das Ergebnis wäre: E:\taegl_Backup_P1\2022-022020-02-06


    Richtig wäre:

    AutoIt
    Local $String = StringMid ("E:\taegl_Backup_P1\2022-02-06" , 1, 19) ;- Oder aus meiner Sicht besser: StringTrimRight("E:\taegl_Backup_P1\2022-02-06", 10)
    $sNewDate = StringReplace(_DateAdd('Y', -2, "2022-02-06"), "/", "-")
    DirRemove($String & $sNewDate)

    So klappt es auch:

    ConsoleWrite($dEncrypted & '')

    Aber dann erfolgt die Umwandlung implizit. Ich bevorzuge dies immer explizit handzuhaben (Was das von AspirinJunkie angesprochene String() machen würde).

    Und das klappt auch nur beim Verschlüsseln, beim Entschlüsseln würdest du dann 0x54657374 erhalten anstatt wieder Test . Dort ist das BinaryToString() notwendig.

    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]

    AspirinJunkie Es ging ja nur um die (Konsolen-)Ausgabe bei meinem Beispiel. (bzw. in meiner Anwendung bekomme ich halt einen String von der User-Eingabe und prüfe den dann nach der (De)kodierung direkt gegen). Ich wollte nur zeigen, was man mit dem Ergebnis machen muss, um damit (aus welchen Gründen auch immer) als String weiter arbeiten zu können. Ansonsten stimme ich dir zu 100% zu, wobei die Performance-Gründe, je nach Programm, zu relativieren sind.


    In wie weit Sidewinder hier wirklich die Ausgabe als String braucht oder einfach mit dem Original weiter machen kann (und das Consolewrite nur ein Versuch zur Kontrolle war), kann wohl nur er selber beurteilen, da wir den Rest des Codes und deren Anwendug nicht kennen.

    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.

    Hmm, du hast Recht, irgendwas muss ich noch anders gemacht haben, ich schaue nochmal.


    So funktioniert es bei mir die Anzeige nach dem Entschlüsseln (bei mir gibt der Benutzer halt nur den Wert ohne den Hex-Indikator an, daher hier das explizite '0x' am Start):

    AutoIt
    Global Const $vCryptKey = _Crypt_DeriveKey(StringToBinary('CryptPassword'), $CALG_RC4)
    Global $Return = BinaryToString(_Crypt_DecryptData('0x' & 'A338D5F9', $vCryptKey, $CALG_USERKEY))
    ConsoleWrite($Return)

    Das Gleiche jedoch scheint bei der Verschlüsselung nicht zu funktionieren. Aber auch andersherum nicht. Daher ergibt sich:


    Das BinaryToString ändert grundsätzlich nichts an den Daten sondern markiert diese lediglich als String.
    Für die Weiterverarbeitung erst einmal unschädlich, da damit auch das Decrypten auch funktioniert (Die Daten bleiben ja gleich) aber sein Ausgabeproblem mit ConsoleWrite bleibt bestehen.

    Daher ist das BinaryToString hier ziemlich sinnfrei.

    Bei mir funktioniert mit dem BinaryToString() die Konsolenausgabe einwandfrei ohne ein @CRLF oder so hinten dran, daher nicht Sinnfrei

    AspirinJunkie : Hatte ich das oben nicht bereits bei #4 erwähnt bezüglich des Datentyps?^^

    Wegen der Umwandlung oder nicht: Kommt ja darauf an wo/wie man das Ganze verwendet. Ich habe z.B. das mit einer Benutzereingabe und Prüfung verbunden und arbeite daher mit einem String.

    Daher habe ich mir folgende Funktion gebaut (für AES256):

    AutoIt
    Func Uncrypt($Crypt) ;Beispiel für entschlüsseln wäre natürlich auch zum verschlüsseln möglich
    Local Const $vCryptKey = _Crypt_DeriveKey(StringToBinary('DeinCryptKey'), $CALG_AES_256)
      Return BinaryToString(_Crypt_DecryptData('0x' & $Crypt, $vCryptKey, $CALG_USERKEY))
    EndFunc

    Hat auch ein wenig was davon wie man damit umgehen möchte.

    Sidewinder Ich habe bei mir immer ein BinaryToString() drum herum, also so (um bei deinem Beispiel zu bleiben):

    AutoIt
    #include <Crypt.au3>
    $g_hKey = _Crypt_DeriveKey(StringToBinary("CryptPassword"), $CALG_RC4); Hier machst du das Gleiche ja auch andersherum, was meine Vermutung bestätigt.
    $sRead = "Test"
    $dEncrypted = BinaryToString(_Crypt_EncryptData($sRead, $g_hKey, $CALG_USERKEY))
    ConsoleWrite($dEncrypted & @CRLF) ;@CRLF nur für Lesbarkeit in der Konsole, funktioniert auch ohne!

    Ich denke das Problem ist der Ausgabetyp, der durch ein einfügen eines Zeichens (egal ob ein leerer String oder Zeilenumbruch etc.) von Autoit dann implizit in einen String convertiert wird.

    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

    Stimmmt Musashi Aber deinen Wrokaround dafür kannte ich acuh noch nicht. Wieder was gelernt.

    Aber wie du schon sagst, kommt das eher selten vor und sollte normalerweise eigentlich auch vermieden werden.

    Also doch deppert XD

    Aber müssten das nicht generell mehr Ergebnisse sein?

    1. Operator: '+'

    1.-4. Zahl (als Beispiel): 1,2,3,4

    Mögliche Ergebnisse:

    1. 1+2 = 3 (W1 + W2)

    2. 1+3 = 4 (W1 + W3)

    3. 1+4 = 5 (W1 + W4)

    4. 2+3 = 5 (W2 + W3)

    5. 2+4 = 6 (W2 + W4)

    6. 3+4 = 7 (W3 + W4)


    Wenn ich aber Alina s Beschreibung etc. aus #18 nehme, nutzt man 4 Operatoren für "4" Rechnungen, welche von den 6 möglichen jedoch gemacht werden soll, steht nirgends.

    Ich kann natürlich ab 2. bis 4. die anderen 3 Operatoren verwenden, aber welche sollen dann für 5. und 6. genutzt werden bzw. welche Rechnung soll ggf. nicht gemacht werden?


    Aus meiner Sicht daher unvollständige Anforderung.

    Bin ich jetzt irgendwie deppert?

    Das ist doch das was meine Schleife macht. Auch wenn ich gerade einen kleinen Fehler gesehen habe.

    Ich stehe da gerade wieder wie in Ox vorm Berg . Brauche einen Alina-Translator:rofl:


    Ich denke du musst damit 2 Funktionen oder Schleifen bauen.

    Ich verstehe dich so: Bei den ersten 8 wird zweimal diese Abfolge gemacht: '+', '+', '*', '-'

    Danach die 16er Folge wie vorher bis zum Ende. Richtig?

    hpb:

    1. Die Fehlerabfrage gehört in die Funktion

    2. Du musst die Funktion auch aufrufen, also ein copy() an der Stelle einfügen wo sie ausgeführt werden soll...


    Edit: Wie gesagt ein ganzes skript wäre esser zur Fehlerfindung ansonsten ist hier :Glaskugel: angesagt.