CMD / Batch zeichenlimit?

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!

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren