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-Key: 284608

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

Printed on: April 25, 2024 at 16:04 o'clock

Member: Raven42
Raven42 Oct 04, 2015 updated at 08:53:07 (UTC)
Goto Top
Auch Hallo,

versuchs mal so:

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


Gruß
Axel
Member: Raven42
Raven42 Oct 04, 2015 at 08:59:55 (UTC)
Goto Top
vergiss die Lösung, ich sehe gerade das kein Trennzeichen drin ist ...
Member: colinardo
Solution colinardo Oct 04, 2015, updated at Oct 06, 2015 at 21:10:18 (UTC)
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
Member: rubberman
Solution rubberman Oct 04, 2015, updated at Oct 06, 2015 at 21:10:27 (UTC)
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
Member: Endoro
Endoro Oct 06, 2015 at 00:39:56 (UTC)
Goto Top
Hey,
hier gibts eine ausführliche Betrachtung der verschiedenen StringLength-Funktionen von Dave Benham face-smile
Gruß, Endoro
Member: rubberman
rubberman Oct 06, 2015 at 10:43:48 (UTC)
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
Member: RaSi76
RaSi76 Oct 06, 2015 at 21:14:20 (UTC)
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