Batch Buchstaben in einer Variable zählen?

2 Antworten

Hier als kleiner loop, der dir die Länge in der Variable len ausrechnet:

@echo off & setlocal enableDelayedExpansion
set /p "text=Text: >"

:Loop
if "!text:~%len%!" neq "" set /a len+=1 & goto Loop

echo %len%
pause >nul

Und hier als wiederverwendbare Funktion:

@echo off & setlocal enableDelayedExpansion
set /p "text=Text: >"

call :length text

echo %text.length%
pause
exit


:length  (variable<string> %1)
    set /a tmp=0
    :while_length
        if "!%~1:~%tmp%!" neq "" set /a tmp+=1 & goto while_length
    set /a "%~1.length=tmp"
exit /b !%~1.length!

Die Spielerei mit Variablenname.length hat dann doch mehr Zeilen gekostet als gedacht, da man diese nicht direkt in der if-Abfrage benutzen kann (batch müsste die Zeile dazu 3 mal auswerten), darum auch die temporäre Variable.

~Tim


Roderic  06.04.2018, 18:20

Respekt!

Ich hab schon viel mit batch gemacht - richtig viel - auch so was in die Richtung. Das es doch geht, hätt ich nun nicht gedacht.

Ist aber ziemlicher "von hinten durch die Brust ins Auge"-Code.

;-)

1
timlg07  06.04.2018, 18:29
@Roderic

Danke ;) aber was meinst du mit "von hinten durch die Brust ins Auge-Code"?

0
Huhngut 
Fragesteller
 06.04.2018, 18:25

Danke

2
Huhngut 
Fragesteller
 06.04.2018, 18:26

Danke

2
Erzesel  10.04.2018, 21:18

man kann die Stringlänge aber auch ganz klassisch ermitteln:
...den String in eine Datei umleiten und deren Größe abfragen.
Die Datei ist unter Windows/Dos immer 3 Byte größer als der String!
Also Subtrahiert man 3 von der Dateigröße.

setlocal enabledelayedexpansion
set /p "text=Text: >"
rem variante on the fly :)
echo %text% >"%temp%\count.txt"
for %%a in ("%temp%\count.txt") do (
		set /a "lenght=%%~za-3"
		echo !lenght! 
)

rem  oder...
rem ...lass andere  die Arbeit  tun :p ,
rem mshta ist auf  jedem Windowssystem  vorhanden  und  beherrscht inline Commandozeile:
mshta "javascript:str='%text%';close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(str.length));" |more

der For loop ist lediglich ein Dummy um an die Filesize-Variable "%%~za" heranzukommen.
Heute in Zeiten von Festplatte mit großem Catch /und SSD dürfte diese Datei-Methode schneller sein als den variableninhalt Zeichen für Zeichen durchzuhächeln.

eine gute alterative ist auch instant-javascript mit mshta....

alle Wege führen nach Rom...


1

Das wirst du mit der eingeschränkten Auswahl an DOS Kommandos nicht hinkriegen.


Huhngut 
Fragesteller
 05.04.2018, 11:11

Schade aber trotzdem danke

0
timlg07  06.04.2018, 18:05

Warum sollte man das nicht hinbekommen? Um Buchstaben zu zählen braucht man nur ne while Schleife (in Batch muss man diese halt in Schleife und separate if Abfrage aufteilen.)

1