Pfad - vor oder nach einem Backslash etwas einfügen

  • Hallo,

    ich habe einen Pfad

    $Datei_alt = "c:\1\2\3\4\5\test.txt"

    Was ist der beste Weg, um mit AutoIt vor bzw. nach dem 1., 2. .... letzten Backslash etwas einzufügen

    bzw. zwischen dem 3. und 5. Backslash den Text auszutauschen?

    Beispiele, was ich erreichen möchte:

    einfügen

    $Datei_alt = "c:\1\2\3\4\5\test.txt"

    $Datei_neu = "c:\Backup\1\2\3\4\5\test.txt"

    $Datei_neu = "c:\1\2\3\4\5 - Backup\test.txt"

    $Datei_neu = "c:\1\2\Backup - 3\4\5\test.txt"

    ersetzen zwischen Backslash 3 bis 5

    $Datei_alt = "c:\1\2\3\4\5\test.txt"

    $Datei_neu = "c:\1\2\Backup\5\test.txt"


    Die Anzahl der Backslash Zeichen habe ich ermittelt über

    Code
    $sString = "\"
    $sText = "c:\1\2\3\4\5\test.txt"
    StringReplace( $sText , $sString, "")
    $iAnzahl = @extended
    MsgBox(0, "", "Anzahl: " & $iAnzahl)

    Einmal editiert, zuletzt von Banana_2_Day (12. August 2019 um 11:20)

    • Offizieller Beitrag

    Die Position des gewünschten Backslash ermitteln. Dann kannst du dort ersetzen (String- Funktionen).

    Python
    $sText = "c:\1\2\3\4\5\test.txt"
    $pos1 = StringInStr($sText, '\', 0, 1)
    $pos2 = StringInStr($sText, '\', 0, 2)
    $posLetzter = StringInStr($sText, '\', 0, -1)
    $posVorLetzter = StringInStr($sText, '\', 0, -2)
  • Die Position des gewünschten Backslash ermitteln.

    Danke für die Anregung. Ich habe den Text mit StringLeft / StringRight zerlegt und wieder zusammengesetzt.

    Das funktioniert und wäre eine Lösungsvariante, um "c:\1 test\Backup\1 test\1 test.txt" zu erhalten.

    Gibt es eine bessere Möglichkeit, um aus

    $sText = "c:\1 test\1 test\1 test\1 test.txt"

    $sText = "c:\1 test\Backup\1 test\1 test.txt"

    zu erhalten? (Ersetze den Text zwischen dem zweiten und dritten Backslash.)

    StringMid und StringReplace habe ich versucht. Wenn ich in der Hilfe richtig gelesen habe, wird nur die "Position des Zeichens, an der das Ersetzen beginnt." verwendet.

    Wie integriere ich bei diesen beiden Befehlen und meinem Beispiel die „Position des Zeichens, an dem das Ersetzen endet“?

    Gibt es einen alternativen Befehl für ...

    Ersetze den Text im String von Zeichen 7-12 durch „Backup“?

  • Hi Banana_2_Day !

    Du könntest auch den Weg über ein Array gehen - hier ein Beispiel für Einfügen :

    Neben dem Einfügen von Elementen kann man auch Löschen, Verändern usw.

    StringMid und StringReplace habe ich versucht. Wenn ich in der Hilfe richtig gelesen habe, wird nur die "Position des Zeichens, an der das Ersetzen beginnt." verwendet.

    Zumindest bei StringMid gibt es den [optional]-Parameter count.

    Gruß Musashi

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

    • Offizieller Beitrag

    StringRegEx wäre auch noch eine Möglichkeit:

    Code
    $sText = "c:\1\2\3\4\5\test.txt"
    
    $sNew1 = StringRegExpReplace($sText, "(.+?\\)(.+)", "$1backup\\$2")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sNew1 = ' & $sNew1 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    
    $sNew2 = StringRegExpReplace($sText, "(.+?\\)((?:.+?\\){2})((?:.+?\\){2})((?:.+?\\){1})(.+)", "$1$2backup\\$4$5")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sNew2 = ' & $sNew2 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console