CMD / Batch zeichenlimit?
Hallo ich habe mal eine Frage, kann man mit /set p usw ein Zeichenlimit erstellen?
set /p name= (irgendwas)
und wenn "(irgendwas)" eine anzahl von 10 Zeichen überschreitet, das das erkannt wird? geht das?
1 Antwort
Während der Eingabe geht eine Überprüfung nur umständlich (zugegeben, ich hatte das auch noch nie nötig) ...das ist Batch, der "Holzhammer" ... (da muss ich mir mal Gedanken drüber machen, eine Lösung gibts immer, bin aber derzeit mit anderen Sachen beschäftigt.)
Nach der Eingabe die Länge des Strings feststellen und vergleichen , ist relativ einfach, auch wenn es nicht wirklich einen Befehl dafür gibt. aber man kann ja mal andere Befehle missbrachen.:
(echo:"Das ist ein TestString"&echo:)|findstr /o $
Ausgabe:
0:"Das ist ein TestString"
28:
Die 2. Zeile zeigt 5 Zeichen mehr an, als der String lang ist.. das wird dann mit for /f in eine Variable übergeben. ...dörä
Aber nun zu Potte:
der Tickreiche:
@echo off
chcp 65001 >nul %= Umlaute verwenden =%
:loop
rem Variable Name leeren
set "name="
set /p "name= gib etwas ein, maximal 10 Zeichen:"
rem ist die Eingabe leer? wen leer dann zurüch
if "%name%"=="" ( echo Die Eingabe war leer, versuche es nochmal! & goto :loop)
rem kleine Trickreiche Routine um die Länge des Strings zu ermitteln.
rem schreibt unseren String in die erste Zeile der Pipe,und hängt einer Weitere Zeile an.
rem Findstr /o ermittelt ab welcher Anzahl von Zeichen die 2.Zeile beginnt. set /a zieht von dieser Zahl 5 ab .
rem (2 "Gänsefüßchen", ein Leerzeichen, und 2 Zeichen für den Zeilenvorschub)
for /f "skip=1 delims=:" %%a in ('^(echo:"%name%"^&echo:^)^|findstr /o "$"') do set /a "len=%%a-5"
if %len% gtr 10 (
echo Die Eingabe hatte %len% Zeichen, versuche es nochmal!
goto :loop
)
echo Du hast "%name%" eingegeben, %len% zeichen lang
pause
und der Klassiker:
rem alternative Methode (der Klassiker):
rem Wenn es bei der Ermittlung der Stringlänge auf Geschwindigkeit ankommt, ist diese am schnellsten.
rem der Schreib-Lese-cach von Windows gibt das Ergebniss bereits zurück, wärend die Daten noch auf HDD/SSd geschrieben werden ca 3Millisekunden
rem Hier aber Irrelvant, die obere Methode schreibt nicht auf einen Datenträger... und ist mit ca 15 ms
:loop2
rem Variable Name leeren
set "name="
set /p "name= gib etwas ein, maximal 10 Zeichen:"
rem ist die Eingabe leer? wen leer dann zurüch
if "%name%"=="" ( echo Die Eingabe war leer, versuche es nochmal! & goto :loop2)
rem schreibe die Eingabe in eine Hilfsdatei im Temp-Ordner
echo:"%name%">"%temp%\%%~n0.len"
rem schau nach ob es unsere Datei dort gibt (...aber sicher doch)
rem frage die Dateigröße ab.(%%~a). ...und ziehe wieder unseren Zeichenoverhead ab...
for %%a in ("%temp%\%%~n0.len?") do set /a "len=%%~za-4"
if %len% gtr 10 (
echo Die Eingabe hatte %len% Zeichen, versuche es nochmal!
goto :loop2
)
echo Du hast "%name%" eingegeben, %len% Zeichen lang
pause
Bei Nutzereingaben die "%Variable%" immer in "Gänsefüßchen" halten! Wenn jemand &<>| eingibt stürzt sonst die Batch ab!