Wie kann man mit Batch eine Zeichenkette, welche zwischen 2 anderen Zeichenketten steht aus einer Variable löschen?
Tachchen, ich habe ein ähnliches Problem, wie in diesem Beitrag: https://www.gutefrage.net/frage/wie-kann-man-in-batch-eine-zeichenkette-welche-zwischen-2-sonderzeichen-steht-aus-einer-variable-extrahiern
Ich habe einen Satz, der in einer Variable abgespeichert ist. Dieser Text enthält zwei Zeichenfolgen und den Text zwischen diesen Zeichenfolgen will ich löschen lassen. Desweiteren ist die Zeichenfolge jedesmal mit 1-2 Zeichen anders (die aber immer an der selben stelle stehen). Also muss man wahrscheinlich mit Wildcards arbeiten, z.b. Fragezeichen. Lässt sich das mit Batch machen, oder muss man das mit Powershell machen? Wie würde das in Batch / Powershell aussehen?
Zum Beipiel:
Protokoll.T01.beliebigerzulöschenderText-Autor
Protokoll.T02.beliebigerzulöschenderText-Autor
etc ...
Ich hoffe da kann mir jemand weiterhelfen.
Gruß
2 Antworten
Das sollte funzen. Die Eingabe erfolgt über eine Textdatei (
test.txt im selben Ordner wie das Script), welche eingelesen wird.
Anschließend werden die einzelnen Zeilen jeweils gesplittet und in $StB wieder zu einem String zusammengefügt.
Anschließend wird der fertige String dann auf der Konsole ausgegeben ($StB). Diese Zeile kann man verändern, um eine entsprechende Weiterverarbeitung zu ermöglichen (in Array schreiben und in ne neue Textdatei schreiben z.B.).
Als Eingabe habe ich deine Beispielzeilen von oben in eine Textdatei (test.txt im selben Ordner wie das Script) geschrieben. Die Ausgabe:
Protokoll.T01-Autor
Protokoll.T02-Autor
Geschrieben ist das in Powershell. Falls du noch Fragen hast, einfach meine Antwort kommentieren ;)
$con = get-content .\test.txt
foreach($zeile in $con) {
$temp = $zeile.split(".");
$temp2 = $temp[2].split("-");
$StB = $temp[0]+"."+$temp[1]+"-"+$temp2[1]
$StB
}
Wenn der zu löschende Teil immer an derselben Position ist, ist es einfach.
Wenn z. B. die ersten 20 Zeichen mitgenommen, 5 Zeichen ausgelassen und der Rest wieder mitgenommen werden soll:
%variable:~0,20%%variable:~25%
(der Wert vor dem Komma gibt die Anzahl der zu überspringenden Zeichen an, der Wert nach dem Komma - falls vorhanden - die Anzahl der mitzunehmenden Zeichen. Wenn der erste Wert ausgelassen wird, wird 0 angenommen, wenn der zweite Wert ausgelassen wird, wird der Rest der Variablen bis zum Ende mitgenommen.)
Das kriegt man mit Tricks auch hin. Ich hab da was gefunden: http://stackoverflow.com/questions/15494711/how-to-get-position-of-the-sub-string-in-string-in-batch
das kann man so erweitern, dass die Position des Textes vor dem zu löschenden Text und die Position des Textes nach dem zu löschenden Text gefunden werden können und dann den Text dazwischen rausgeschnitten werden kann.
Es erfordert aber (soweit ich das sehe), dass eine Batch-Datei eine andere erzeugt und dann aufruft, möglicherweise bis in die 2. Ebene.
Leider ist das damit nicht getan. Der zu löschende Text hat immer eine unterschiedliche länge und die Zeichenketten stehen auch nur immer pro Ausführung an der selben Stelle.
Das Script muss das also schon flexibel handhaben können, deswegen wäre so etwas fixes keine Lösung.
Damit "(die aber immer an der selben stelle stehen)" meinte ich, dass die Wildcards innerhalb der Zeichenfolge an der selben Stelle stehen würden.