Batch - Spezielle FOR zählweise
Hallo zusammen
Ich möchte mit der FOR Schleife eine spezielle "Zählfolge" verwenden.
Nun ist die Frage, ob dies überhaupt möglich ist:
Die Zählvolge sollte nicht nur von 1-9 zählen, sondern auch Buchstaben und Sonderzeichen beinhalten.
Das würde dann etwa so aussehen:
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ä,ö,ü,-,_,...
und dann 01,02,03,04,05,06,07,08,...
Ist dies möglich und wenn ja, wie?
Sonst, gibt es eine andere Möglichkeit um so etwas zu realisieren?
Hoffe ihr könnt mir helfen.
Gruss DexXxtrin
Ich möchte mit der FOR Schleife eine spezielle "Zählfolge" verwenden.
Nun ist die Frage, ob dies überhaupt möglich ist:
Die Zählvolge sollte nicht nur von 1-9 zählen, sondern auch Buchstaben und Sonderzeichen beinhalten.
Das würde dann etwa so aussehen:
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ä,ö,ü,-,_,...
und dann 01,02,03,04,05,06,07,08,...
Ist dies möglich und wenn ja, wie?
Sonst, gibt es eine andere Möglichkeit um so etwas zu realisieren?
Hoffe ihr könnt mir helfen.
Gruss DexXxtrin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 92371
Url: https://administrator.de/contentid/92371
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo DexXxtrin!
In Batch ist vieles möglich, aber vielleicht holt Du etwas weiter aus und erklärst kurz, wie/wozu Du diesen "Zähler" verwenden willst ...
Außerdem ist mir die Fortsetzung mit "01,02,..." nicht klar - eigentlich müsste das "10,11,..." sein, bzw sollten, bei Verwendung von führenden Nullen, von Vornherein alle "Zahlen" die gleiche Stellenanzahl aufweisen.
Und: Welche Basis (Anzahl unterschiedlicher "Ziffern") willst Du verwenden?
Grüße
bastla
In Batch ist vieles möglich, aber vielleicht holt Du etwas weiter aus und erklärst kurz, wie/wozu Du diesen "Zähler" verwenden willst ...
Außerdem ist mir die Fortsetzung mit "01,02,..." nicht klar - eigentlich müsste das "10,11,..." sein, bzw sollten, bei Verwendung von führenden Nullen, von Vornherein alle "Zahlen" die gleiche Stellenanzahl aufweisen.
Und: Welche Basis (Anzahl unterschiedlicher "Ziffern") willst Du verwenden?
Grüße
bastla
Hallo DexXxtrin!
Eigentlich wird bei Dir die Ziffer "0" als 1 verwendet, beim Übergang auf die zweite Stelle allerdings auch wieder als 0 (ansonsten müsste die erste zweistellige Zahl zB "0~" - wenn "~" die erste/letzte Ziffer Deines Vorrates wäre - lauten).
Als Beispiel, wie es grundsätzlich gehen könnte, ein Versuch mit der Basis 20 (Ziffern "0"-"9", Buchstaben "a"-"j"):
Das Unterprogramm ":Codierung" wird mit Übergabe der laufenden Zahl (als Dezimalzahl) aufgerufen und erzeugt deren Pendant im "20er-System" in der Variablen %Zahl%.
Um den jeweils aktuellen Wert dieser Variablen innerhalb der Schleife ausgeben zu können, ist anstelle von %Zahl% die Schreibweise !Zahl! zu verwenden (Stichwort "delayedExpansion"), was bereits ein erster Hinweis auf eine Besonderheit/Problematik bei der Umsetzung in einem Batch ist - "!" gilt hier als Sonderzeichen und eignet sich daher genauso wenig als Bestandteil des Ziffernvorrates wie etwa das Anführungszeichen, "|", "&" sowie einige weitere Zeichen.
Welche Zeichen für Deine Anwendung (welche immer das auch sein mag) nötig und in Batch verwendbar sind, wirst Du selbst feststellen müssen.
Grüße
bastla
P.S.: Um die Ausgabe besser nachvollziehen zu können, solltest Du den Batch von der Kommandozeile aus starten und ein ">D:\Textdatei.txt" anfügen, damit die Zahlen in die angegebene Datei geschrieben werden und Du sie Dir mit einem Editor ansehen kannst. Alternativ dazu kannst du auch am Ende der Zeile 4
hinzufügen - in diesem Fall müsstest du am Anfang auch noch mit
jeweils die Ausgabedatei löschen.
Eigentlich wird bei Dir die Ziffer "0" als 1 verwendet, beim Übergang auf die zweite Stelle allerdings auch wieder als 0 (ansonsten müsste die erste zweistellige Zahl zB "0~" - wenn "~" die erste/letzte Ziffer Deines Vorrates wäre - lauten).
Als Beispiel, wie es grundsätzlich gehen könnte, ein Versuch mit der Basis 20 (Ziffern "0"-"9", Buchstaben "a"-"j"):
@echo off & setlocal enabledelayedexpansion
set "Ziffern=0123456789abcdefghij"
set /a Basis=20
for /l %%i in (0,1,500) do call :Codierung %%i & echo !Zahl!
goto :eof
:Codierung
set Rest=%1
set Zahl=
:Loop
set /a Stelle=%Rest%%%Basis%
set "Zahl=!Ziffern:~%Stelle%,1!%Zahl%"
set /a Rest=%Rest%/%Basis%
if %Rest% gtr 0 goto :Loop
goto :eof
Um den jeweils aktuellen Wert dieser Variablen innerhalb der Schleife ausgeben zu können, ist anstelle von %Zahl% die Schreibweise !Zahl! zu verwenden (Stichwort "delayedExpansion"), was bereits ein erster Hinweis auf eine Besonderheit/Problematik bei der Umsetzung in einem Batch ist - "!" gilt hier als Sonderzeichen und eignet sich daher genauso wenig als Bestandteil des Ziffernvorrates wie etwa das Anführungszeichen, "|", "&" sowie einige weitere Zeichen.
Welche Zeichen für Deine Anwendung (welche immer das auch sein mag) nötig und in Batch verwendbar sind, wirst Du selbst feststellen müssen.
Grüße
bastla
P.S.: Um die Ausgabe besser nachvollziehen zu können, solltest Du den Batch von der Kommandozeile aus starten und ein ">D:\Textdatei.txt" anfügen, damit die Zahlen in die angegebene Datei geschrieben werden und Du sie Dir mit einem Editor ansehen kannst. Alternativ dazu kannst du auch am Ende der Zeile 4
>>D:\Textdatei.txt
del D:\Textdatei.txt 2>nul
Versuchs mal mit folgendes Batch:
Die Reihe kannst du beliebeig fortsetzen.
@echo off
FOR /F "tokens=3* delims= " %%i in ('findstr /B "REM DATA" %0') do echo %%i
REM DATA 0
REM DATA 1
REM DATA 2
REM DATA 3
REM DATA 4
REM DATA 5
REM DATA 6
REM DATA 7
REM DATA 8
REM DATA 9
REM DATA a
REM DATA b
REM DATA c
REM DATA d
REM DATA e
REM DATA f
REM DATA g
REM DATA h
REM DATA i
REM DATA j
REM DATA k
REM DATA l
REM DATA m
REM DATA n
REM DATA o
REM DATA p
REM DATA q
REM DATA r
REM DATA s
REM DATA t
REM DATA u
REM DATA v
REM DATA w
REM DATA x
REM DATA y
REM DATA z
Die Reihe kannst du beliebeig fortsetzen.
Hallo DexXxtrin!
Die erwähnten Probleme mit den Sonderzeichen waren auf eine Weiterverarbeitung der erstellten "Nummer" bezogen - wenn allerdings letztere, so wie in meinem Beispiel, nur per "echo" ausgegeben werden soll, könntest Du sogar ein Anführungszeichen verwenden (allerdings nur als letztes Zeichen):
Grüße
bastla
Die erwähnten Probleme mit den Sonderzeichen waren auf eine Weiterverarbeitung der erstellten "Nummer" bezogen - wenn allerdings letztere, so wie in meinem Beispiel, nur per "echo" ausgegeben werden soll, könntest Du sogar ein Anführungszeichen verwenden (allerdings nur als letztes Zeichen):
set "Ziffern=0123456789abcdefghi"""
bastla
Du könntest auch zwei schleifenmachen udn diese Kombinieren:
@echo off
FOR /F "tokens=3* delims= " %%i in ('findstr /B "REM DATA" %0') do (
FOR /F "tokens=3* delims= " %%j in ('findstr /B "REM DATA" %0') do echo %%i%%j
)
REM DATA
REM DATA 0
REM DATA 1
REM DATA 2
REM DATA 3
REM DATA 4
REM DATA 5
REM DATA 6
REM DATA 7
REM DATA 8
REM DATA 9
REM DATA a
REM DATA b
REM DATA c
REM DATA d
REM DATA e
REM DATA f
REM DATA g
REM DATA h
REM DATA i
REM DATA j
REM DATA k
REM DATA l
REM DATA m
REM DATA n
REM DATA o
REM DATA p
REM DATA q
REM DATA r
REM DATA s
REM DATA t
REM DATA u
REM DATA v
REM DATA w
REM DATA x
REM DATA y
REM DATA z