Batch - Prüfen ob erstes Zeichen einer Variable eine Zahl ist
Hi,
ich will per Batch Prüfen ob das erste Zeichen einer Variable eine Zahl ist.
also einfach
if erstes zeichen von %bla% ist eine zahl (
echo zahl
) else (
echo keine zahl
)
weiß jemand wie das geht?
Schonma Vielen Dank für hilfen.
MFG
ich will per Batch Prüfen ob das erste Zeichen einer Variable eine Zahl ist.
also einfach
if erstes zeichen von %bla% ist eine zahl (
echo zahl
) else (
echo keine zahl
)
weiß jemand wie das geht?
Schonma Vielen Dank für hilfen.
MFG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 102899
Url: https://administrator.de/contentid/102899
Ausgedruckt am: 23.11.2024 um 04:11 Uhr
10 Kommentare
Neuester Kommentar
Servus,
so ganz banal würde ich das so (unelegant und ungetestet) lösen wollen.
Was natürlich nur dann funktionieren sollte, wenn %bla% nicht Null ist...
Gruß
so ganz banal würde ich das so (unelegant und ungetestet) lösen wollen.
set "tmp1=%bla:~-,1%"
set /a "tmp2=%bla:~-,1%"
if &tmp1%==%tmp2% Echo erstes zeichen von %bla% ist eine zahl
Was natürlich nur dann funktionieren sollte, wenn %bla% nicht Null ist...
Gruß
Moin leb0rtran,
das würde ich im Batch genau wie auch in strukturierteren Skriptsprachen mit einen ganz banalen Textvergleich machen.
Wenn erstes Zeichen größer gleich "0" und kleiner gleich "9", dann ist es eine Ziffer.
Grüße
Biber
das würde ich im Batch genau wie auch in strukturierteren Skriptsprachen mit einen ganz banalen Textvergleich machen.
Wenn erstes Zeichen größer gleich "0" und kleiner gleich "9", dann ist es eine Ziffer.
IF "%var:~0,1%" GEQ "0" IF "%var:~0,1%" LEQ "9" @Echo Var ist eine Ziffer
Grüße
Biber
Moin leb0rtran,
gut, dass Du noch mal nachfragst.
Ich habe es diese Woche schon mal in einem anderen Beitrag geschrieben:
die richtige, aber rein "handwerkliche" Beantwortung ("Welche Syntax muss ich nehmen für...?") einer Frage ist meistens zu kurz gegriffen für eine Lösung. Meist ist ja der Kontext entscheidend für die Wahl einer Lösungsstrategie.
Bei Deinem Problem ginge es VIEL schneller, wenn Du ein Tool verwenden würdest, das Dir ratzfatz die Zeilen zählen kann und eines, das Dir nur die Zeilen, die mit einer Ziffer beginnen, rausflöhen kann.
Dann hast Du ja möglicherweise nur noch 10000 der 60000 Zeilen zu "prüfen".
Beides kann FindStr.exe. (ist auf Deinem Rechner).
Nur Alle Zeilen aus Deiner Ipkrams.txt, die mit einer Ziffer 0-9 beginnen(hier mit Zeilennummer):
Grüße
Biber
gut, dass Du noch mal nachfragst.
Ich habe es diese Woche schon mal in einem anderen Beitrag geschrieben:
die richtige, aber rein "handwerkliche" Beantwortung ("Welche Syntax muss ich nehmen für...?") einer Frage ist meistens zu kurz gegriffen für eine Lösung. Meist ist ja der Kontext entscheidend für die Wahl einer Lösungsstrategie.
Bei Deinem Problem ginge es VIEL schneller, wenn Du ein Tool verwenden würdest, das Dir ratzfatz die Zeilen zählen kann und eines, das Dir nur die Zeilen, die mit einer Ziffer beginnen, rausflöhen kann.
Dann hast Du ja möglicherweise nur noch 10000 der 60000 Zeilen zu "prüfen".
Beides kann FindStr.exe. (ist auf Deinem Rechner).
Nur Alle Zeilen aus Deiner Ipkrams.txt, die mit einer Ziffer 0-9 beginnen(hier mit Zeilennummer):
findstr /n /R "^[0-9].*" ipkrams.txt
Und einfach alle Zeilen zählen ginge so bsp. am CMD-Prompt):for /f "delims=:" %i in ('findstr /n $ ipkrams.txt') do @set "linesCount=%i"
--> linesCount=60016
Grüße
Biber
Servus again,
Dann halt "so" herum
Gruß
edit2:
bei der lösung von Biber is mir grad aufgefallen,
bei der lösung von Biber is mir grad aufgefallen,
findstr /n /R "^[0-9].*" ipkrams.txt
dass wenn eine Zeile aus ---------- besteht, die auch angezeigt wird
Dann halt "so" herum
findstr /n "0 1 2 3 4 5 6 7 8 9" ipkrams.txt
Gruß
Hmm,
hab ich nicht verstanden, das mit der "--------" Zeile.
Die Ausgabe von "net user" enthält definitiv und reproduzierbar eine solche "---" Zeile.
Wenn ich diese Ausgabe mit meinem Findstr-Ausdruck abgrasen lasse, findet er nix.
Verwundert
Biber
hab ich nicht verstanden, das mit der "--------" Zeile.
Die Ausgabe von "net user" enthält definitiv und reproduzierbar eine solche "---" Zeile.
Wenn ich diese Ausgabe mit meinem Findstr-Ausdruck abgrasen lasse, findet er nix.
net user>test777.txt
findstr /n /R "^[0-9].*" test777.txt
-## oder gleichwertig folgende Syntax ##-
findstr /n /b /R "[0-9].*" test777.txt
{findet nix; keine Ausgabe}
echo 1233>>test777.txt
findstr /n /b /R "[0-9].*" test777.txt
9:1233 ---------> works as designed...
Verwundert
Biber
Ach soooooooo, leb0rtran,
jetzt [edit] bezogen auf den Post direkt über diesem [/edit] versteh ich, warum wir zu unterschiedlichen Ergebissen kommen.
Oben sprach ich von ZWEI Aktionen
Nochmal zur Verdeutlichung: wenn Du die Anzahl zeilen wissen willst, die mit einer Ziffer anfangen:
Wenn Du die eigentlichen Zeilen noch betrachten,/verarbeiten willst, also z.B. wie in Deinem allerersten Ansatz an eine Call:Routine weitergeben willst:
Grüße
Biber
jetzt [edit] bezogen auf den Post direkt über diesem [/edit] versteh ich, warum wir zu unterschiedlichen Ergebissen kommen.
Oben sprach ich von ZWEI Aktionen
- erstens ALLE Zeilen zählen (anzahl zeilen der Textdatei). Dafür brauchst Du den "FindStr /n $" -Befehl
- zweitens einen FindStr-befehl, der Dir wirklich die Zeilen filtert, d.h. der Dir nur die mit einer Ziffer beginnenden zeilen liefert.
Nochmal zur Verdeutlichung: wenn Du die Anzahl zeilen wissen willst, die mit einer Ziffer anfangen:
>type ipkrams.txt
blub
123.123.123.132
bla ---
3.3.3.3:20
bla
>findstr /n /b /R "[0-9].*" ipkrams.txt
2:123.123.123.132
4:3.3.3.3:20
>for /f "delims=:" %i in ('findstr /n /b /R "[0-9].*" ipkrams.txt') do set /a cnt+=1
2 <---------------Ergebnis: 2 Zeilen as should do
>for /f "tokens=1* delims=:" %i in ('findstr /n /b /R "[0-9].*" ipkrams.txt') do @echo [%j]
[123.123.123.132]
[3.3.3.3:20]
Grüße
Biber