woswaasi
Goto Top

Batch: alle Zeichen außer Zahlen aus Variable entfernen

Hallo zusammen,

ich habe ein Batch-Skript erstellt, das aus einer CSV-Datei diverse Variablen ausliest - unter anderem auch eine Telefonnummer (%telefon%). Dabei kann es vorkommen, dass die Telefonnummer mit / oder - eingegeben wird.

Beispiele:
066412345678 (optimal)
0664-12345678
0664/12345678
Es sind auch noch andere Varianten möglich, die Kreativität unserer Mitarbeiter kennt manchmal keine Grenzen.

Ich würde jetzt gerne vor der Verarbeitung der Variablen alle Zeichen, die keine Zahl sind, aus der Variable löschen (sodass aus 0664-12345678 066412345678 wird).

Bitte um Hilfe, wie ich das lösen kann.

Vielen Dank,
Albert

Content-ID: 668654

Url: https://administrator.de/contentid/668654

Ausgedruckt am: 21.11.2024 um 12:11 Uhr

150704
Lösung 150704 09.10.2024 aktualisiert um 11:20:18 Uhr
Goto Top
@echo off
set "telefon=+49(13)34532-345"  
for /f "delims=" %%a in ('powershell -EP Bypass -C "'%telefon%' -replace '[^0-9]'"') do set "telefon=%%a"  
echo %telefon%
Woswaasi
Woswaasi 09.10.2024 aktualisiert um 11:40:40 Uhr
Goto Top
Hallo Ted555,

vielen Dank für deine rasche Antwort!

Wenn ich dein Skript so ausführe, wie du es geschrieben hast, ist das Ergebnis auch so, wie es sein soll.

Eingebaut in meinem Skript ist das Ergebnis genau umgekehrt - es werden alle Zahlen gelöscht.

Hier der relevante Teil meines Skriptes:

for /f "tokens=5,7,22 delims=^{" %%i in (Verarbeitung\monataktuell.csv) do (  
    set csvdatum=%%i
    set csvdatum=!csvdatum:~0,-1!
    set csvuhrzeit=%%j
    set csvuhrzeit=!csvuhrzeit:~0,-1!
    set csvtelefon=%%k
    if !csvdatum!==!morgen! (
        if defined csvtelefon (
            for /f "delims=" %%a in ('powershell -EP Bypass -C "'!csvtelefon!' -replace '[^0-9]'"') do set "csvtelefon=%%a"  
            set nachricht=SMS an !csvtelefon!: Reminder
            echo !nachricht!
        )
    )
)

Die % bei der Variable habe ich aufgrund der umgebenden for-Schleife mit ! ersetzt. In meiner Test-CSV-Datei habe ich 3 Telefonnummern: 066412345678, 0664/12345678 und 0664-12345678.
Wenn ich das Skript ausführe, wird die erste Nummer als 066412345678 ausgegeben, bei der zweiten wird / und bei der dritten - ausgegeben, also genau die Zeichen, die eigentlich gelöscht werden sollten.

Hast du noch einen Tipp für mich?

Vielen Dank,
Albert
Woswaasi
Woswaasi 09.10.2024 um 13:02:08 Uhr
Goto Top
Hallo Ted555,

ich habe die Lösung gefunden:
ich habe beim Ausdruck nach -replace ein weiteres ^ eingefügt ([^^0-9]), jetzt funktioniert es auch in meinem Skript.

Vielen Dank für deine Hilfe!