Wie kann man mit Batch eine Zeichenkette, welche zwischen 2 anderen Zeichenketten steht aus einer Variable löschen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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

Woher ich das weiß:Berufserfahrung – Software-Entwickler
KekseFuerAlle 
Fragesteller
 17.06.2016, 15:37

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.

0
KekseFuerAlle 
Fragesteller
 17.06.2016, 15:40

Damit "(die aber immer an der selben stelle stehen)" meinte ich, dass die Wildcards innerhalb der Zeichenfolge an der selben Stelle stehen würden.

0
PWolff  17.06.2016, 21:10
@KekseFuerAlle

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.

0
PWolff  17.06.2016, 21:23
@Etter

Weil die Batch-Befehle nur für einfache Aufgaben entworfen worden sind. Es ist inzwischen viel mehr möglich als vor 20 Jahren, aber immer noch weit weniger als mit "großen" Sprachen. (Bzw. es ist extrem mühsam in Batch.)

0
Etter  17.06.2016, 21:29
@PWolff

Deswegen würd ich das halt net in Batch machen. Ich würde für so ziemlich nichts mehr Batch benutzen :/

0