Wie kann ich in einer Windows Batch-Datei eine spezielle Textstelle löschen?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Hiermit sollte es gehen, du musst nur das Gleichzeichen durch ein At-Zeichen ersetzen. Davon abgesehen kann ich aber nach einiger Erfahrung nur dazu anraten, für keine Aufgabe, die auch nur so schwierig ist wie die von dir genannte, heute noch Batch zu verwenden. Die Skriptsprache ist überholt, hat eine proprietäre und umständliche Syntax und einen geringen Funktionsumfang. Seit Windows 7 steht als wesentlich komfortablere Variante die Powershell zur Verfügung, seit Windows 10 kannst du auch das Windows Subsystem for Linux verwenden.

Woher ich das weiß:Studium / Ausbildung – Studiere Informatik und programmiere aus Leidenschaft

RobFragtNach 
Beitragsersteller
 04.09.2018, 16:03

Super, das hat wirklich geklappt! Habe es wirklich nur minimal anpassen müssen:

  1. set _string=%1
  2. echo %_string%
  3. for /f "tokens=1 delims=@" %%a in ("%_string%") do (
  4. set RUFNUMMER=%%a
  5. )

Das geht auch mit Batch. Der Befehl hier für alles lautet FOR.

Wenn Du diese Nummer aus einer Textdatei auslesen willst, dann musst Du natürlich irgendwie erst mal sicher gehen, dass pro Zeile nur solche Angaben enthalten sind, oder Du musst einen Suchfilter vor die Zeilenauswertung setzen (z.B: mit IF):

Wichtig ist erst mal die Direktive:

@echo off
SetLocal EnableDelayedExpansion

Das Auslesen der Textdatei geht dann so:

for /f "tokens=1,2 delims=@  eol=" %%A in ("%LOCALAPPDATA%\PhonerLite\Caller.log") do (
  set callerTel=%%~A
  echo.Anrufer Telefon-Nr.: !callerTel!
  set callerIP=%%~B
  echo.Anrufer IP:              !callerIP!
  REM Hier Dein weiterer Verarbeitungs-Code …
)

Beachte, dass durch die Verzögerungs-Direktive oben die Variablen-ID's von "%…%" in "!…!" geändert werden! Ohne diese Verzögerung können Variablen-Setzungen nicht innerhalb eines Sub-Prozesses (z.B. FOR, IF) verarbeitet werden.

Für die Auswertung einer direkte Befehlsausgabe musst Du die FOR-Parameter etwas modifizieren:

for /f "usebackq tokens=1,2 delims=@  eol=" %%A in (`"C:\Pfad\zu\PhonerLite.exe" /parameter`) do (
  REM Hier derselbe Verarbeitungs-Code wie oben …
)

Bitte beachte, dass es sich bei den angegebenen einfachen Anführungszeichen um den Befehl herum nicht um das Apostroph über der [#]-Taste handelt, sondern um das Gravis (Accent Grave) handelt, welcher auf der deutschen Tastatur auf dem [UMSCHALT]-Level zwischen dem [?] und dem [BACKSPACE] liegt, gefolgt von einem [LEER], denn sonst wartet diese Compose-Taste auf einen Buchstaben für einen Gravis-Buchstaben (z.B. "à").