rasi76
Goto Top

Zeichenkette ohne Trennzeichen per FOR-Schleife in einzelne Zeichen zerlegen

Hallo,

trotz intensiver Suche und zahlreichen Versuchen, habe ich bisher keine Lösung für mein (triviales?) Problem finden können, evtl. habt ihr ja einen Tipp für mich.

In einem Batch-Programm soll eine Zeichenkette (6-12 Ziffern) mittels FOR-Schleife in ihre einzelnen Zeichen zerlegt werden, so dass die Zählvariable in jedem Durchlauf mit dem nächsten Zeichen belegt ist (Reihenfolge vorwärts/rückwärts ist egal). Die Ziffern sind allerdings nicht mit einem Trennzeichen voneinander separiert.

Vereinfacht sähe der Aufruf etwa so aus:
for /F %%i in ("123456") do echo %%i  

Als Ausgabe erwarte ich
1
2
3
4
5
6

erhalte jedoch
123456

Eine Lösung mit GOTO habe ich bereits, aber die ist wenig elegant und deutlich länger.

Vielen Dank und viele Grüße
RaSi

Content-ID: 284608

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

Ausgedruckt am: 08.11.2024 um 21:11 Uhr

Raven42
Raven42 04.10.2015 aktualisiert um 10:53:07 Uhr
Goto Top
Auch Hallo,

versuchs mal so:

for %%i in (1 2 3 4 5 6) do echo %%i


Gruß
Axel
Raven42
Raven42 04.10.2015 um 10:59:55 Uhr
Goto Top
vergiss die Lösung, ich sehe gerade das kein Trennzeichen drin ist ...
colinardo
Lösung colinardo 04.10.2015, aktualisiert am 06.10.2015 um 23:10:18 Uhr
Goto Top
Hallo RaSi76, Willkommen auf Administrator.de!
Kannst du so machen:
@echo off & setlocal enabledelayedexpansion
REM Unsere Variable
set "var=1234567890"  
REM Länge der Variablen ermitteln
call :strLength strLen "%var%"  
set /a strLen-=1

REM Ausgabe der einzelnen Zeichen der Variablen
for /L %%a in (0 1 %strLen%) do @(
	echo !var:~%%a,1!
)
goto :eof

REM Makro zum ermitteln der Länge einer Variablen
:strLength
set "#=%~2"  
set length=0
:stringLengthLoop
if defined # (set #=%#:~1%&set /A length += 1&goto stringLengthLoop)
set "%~1=%length%"  
goto :eof
oder auch so
@echo off & setlocal enabledelayedexpansion
set "var=1234567890"  
for /L %%a in (0 1 2000) do @(
	set "char=!var:~%%a,1!"  
	if not "!char!" == "" (echo !char!) else (goto end)  
)
:end
Grüße Uwe
rubberman
Lösung rubberman 04.10.2015, aktualisiert am 06.10.2015 um 23:10:27 Uhr
Goto Top
Hallo RaSi,

so einfach ist das nicht. Frei nach @pieh-ejdsch 's Batch Stringlänge bestimmen:
@echo off &setlocal
set "str=;^1234<>|!$%%&/()=?""  

for /f delims^=^ eol^= %%i in (
  'cmd /u /von /c "echo(!str!"^|find /v ""'  
) do echo %%i

pause
Grüße
rubberman
Endoro
Endoro 06.10.2015 um 02:39:56 Uhr
Goto Top
Hey,
hier gibts eine ausführliche Betrachtung der verschiedenen StringLength-Funktionen von Dave Benham face-smile
Gruß, Endoro
rubberman
rubberman 06.10.2015 um 12:43:48 Uhr
Goto Top
Hey Endoro,

joa, darauf hätte ich verlinkt, wenn Stringlänge das Thema gewesen wäre ... face-wink
Aber du kannst ja mal die Frage lesen, vielleicht hast du noch eine andere Alternative parat.

Grüße
rubberman
RaSi76
RaSi76 06.10.2015 um 23:14:20 Uhr
Goto Top
Hallo,

vielen Dank für eure Vorschläge. Ganz so schlicht, wie ich ursprünglich gehofft hatte, geht es mit FOR wohl nicht. Aber eure Lösungen gefallen mir ganz gut und sind auf jeden Fall nicht so lang, wie meine ursprüngliche GOTO-Lösung. Ich hab mich noch nicht entschieden, welche mir am besten gefällt, aber einer der beiden Ansätze wird es werden.

Vielen Dank und viele Grüße
RaSi