Wie kann ich in einer Windows Batch-Datei eine spezielle Textstelle löschen?
Hallo, ich habe folgendes Problem:
Ich möchte eine Telefonnummer in eine Variable übergeben.
Die Telefonnummer kommt als Parameter aus dem Programm #PhonerLite.
Jedoch wird diese nicht als blanke Telefonnummer übergeben, sondern als "Telefonnummer@IP-Adresse" zum besseren Verständnis hier ein Beispiel:
01238897561@61.75.87.223
Nun möchte ich gern alles nach dem "@" Zeichen und auch das @-Zeichen selbst entfernen. Es soll nur noch die Nummer übrig bleiben, welche ich dann als Variable weiter nutzen möchte.
2 Antworten
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.
Super, das hat wirklich geklappt! Habe es wirklich nur minimal anpassen müssen:
- set _string=%1
- echo %_string%
- for /f "tokens=1 delims=@" %%a in ("%_string%") do (
- set RUFNUMMER=%%a
- )
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. "à").