Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch - Spezielle FOR zählweise

Frage Entwicklung Batch & Shell

Mitglied: DexXxtrin

DexXxtrin (Level 1) - Jetzt verbinden

18.07.2008, aktualisiert 19.07.2008, 4225 Aufrufe, 14 Kommentare

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
Mitglied: bastla
18.07.2008 um 15:23 Uhr
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
Bitte warten ..
Mitglied: DexXxtrin
18.07.2008 um 15:35 Uhr
Eine Führende Null spielt auch eine Rolle, da es auf die Anzahlt Zeichen ankommt.
Die Zählweise wäre so:
0,1,2,...,a,b,c,...,+,",*,...
00,01,02,...,0a,0b,0c,...,0+,0",0*,...
10,11,12,...,1a,1b,1c,...,1+,1",1*,...

dann
000,001,002...,00a,00b,00c,...,00+,00",00*,...

Die Basis wäre dann etwa 116 mit allen Sonderzeichen und Buchstaben (gross und klein)
Bitte warten ..
Mitglied: bastla
18.07.2008 um 17:29 Uhr
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"):
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Ziffern=0123456789abcdefghij" 
03.
set /a Basis=20 
04.
for /l %%i in (0,1,500) do call :Codierung %%i & echo !Zahl! 
05.
goto :eof 
06.
 
07.
:Codierung 
08.
set Rest=%1 
09.
set Zahl= 
10.
:Loop 
11.
set /a Stelle=%Rest%%%Basis% 
12.
set "Zahl=!Ziffern:~%Stelle%,1!%Zahl%" 
13.
set /a Rest=%Rest%/%Basis% 
14.
if %Rest% gtr 0 goto :Loop 
15.
goto :eof
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
01.
>>D:\Textdatei.txt
hinzufügen - in diesem Fall müsstest du am Anfang auch noch mit
01.
del D:\Textdatei.txt 2>nul
jeweils die Ausgabedatei löschen.
Bitte warten ..
Mitglied: miniversum
18.07.2008 um 17:40 Uhr
Versuchs mal mit folgendes Batch:
01.
@echo off 
02.
FOR /F "tokens=3* delims= " %%i in ('findstr /B "REM DATA" %0') do echo %%i 
03.
 
04.
REM DATA 0  
05.
REM DATA 1  
06.
REM DATA 2  
07.
REM DATA 3  
08.
REM DATA 4  
09.
REM DATA 5  
10.
REM DATA 6  
11.
REM DATA 7  
12.
REM DATA 8  
13.
REM DATA 9  
14.
REM DATA a  
15.
REM DATA b  
16.
REM DATA c  
17.
REM DATA d  
18.
REM DATA e  
19.
REM DATA f  
20.
REM DATA g  
21.
REM DATA h  
22.
REM DATA i  
23.
REM DATA j  
24.
REM DATA k  
25.
REM DATA l  
26.
REM DATA m  
27.
REM DATA n  
28.
REM DATA o  
29.
REM DATA p  
30.
REM DATA q  
31.
REM DATA r  
32.
REM DATA s  
33.
REM DATA t  
34.
REM DATA u  
35.
REM DATA v  
36.
REM DATA w  
37.
REM DATA x  
38.
REM DATA y  
39.
REM DATA z 
Die Reihe kannst du beliebeig fortsetzen.
Bitte warten ..
Mitglied: DexXxtrin
18.07.2008 um 18:58 Uhr
Vielen Dank für deine Hilfe!
Diese Variante Funktioniert perfekt!
Es gehen auch alle Sonderzeichen ausser ", da das Schlusszeichen für das Ende der Zeichendefinition gebraucht wird.
Bitte warten ..
Mitglied: DexXxtrin
18.07.2008 um 18:59 Uhr
Kannst du mir diese Datei mal erklären, da ich den Durchblich nicht gerade habe?
Bitte warten ..
Mitglied: bastla
18.07.2008 um 20:31 Uhr
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):
01.
set "Ziffern=0123456789abcdefghi"""
Grüße
bastla
Bitte warten ..
Mitglied: DexXxtrin
18.07.2008 um 21:47 Uhr
Hallo bastla
Bei der Weiterverarbeitung wie ich sie mache, wird es keine Probleme geben.
Aber wiso hast du am schluss 3 Schlusszeichen?
Ich nehme an, mit dem ersten wird der set Befehl geschlossen, was machen dann die anderen beinden noch?

Guss DexXxtrin
Bitte warten ..
Mitglied: bastla
18.07.2008 um 21:53 Uhr
Hallo DexXxtrin!
... was machen dann die anderen beinden noch?
Durch die Verdoppelung kannst Du ein (einzelnes) Anführungszeichen in den String aufnehmen - da allerdings für jedes Zeichen nur eine Stelle vorgesehen ist, muss das Anführungszeichen am Ende des Strings stehen.

Grüße
bastla
Bitte warten ..
Mitglied: DexXxtrin
18.07.2008 um 22:05 Uhr
Hallo bastla!
Vielen dank für deine Hilfe!!!
Es funktioniert perfekt!

Gruss DexXxtrin
Bitte warten ..
Mitglied: miniversum
19.07.2008 um 09:52 Uhr
Die Batch sucht in ihr selbst nach den Zeilen die mit "REM DATA" beginnen. Alles was nach "REM DATA " kommt wird dann ausgegeben. Du kannst also jeden Text dahinter schreiben.
Bitte warten ..
Mitglied: DexXxtrin
19.07.2008 um 10:45 Uhr
Das würde bedeuten, dass ich für alle zweistelligen Zahlen ca. 12'100 REM DATA Zeilen eingeben müsste...?! (Basis 110)
Bitte warten ..
Mitglied: miniversum
19.07.2008 um 10:50 Uhr
Du könntest auch zwei schleifenmachen udn diese Kombinieren:
01.
@echo off 
02.
FOR /F "tokens=3* delims= " %%i in ('findstr /B "REM DATA" %0') do ( 
03.
FOR /F "tokens=3* delims= " %%j in ('findstr /B "REM DATA" %0') do echo %%i%%j 
04.
05.
REM DATA  
06.
REM DATA 0  
07.
REM DATA 1  
08.
REM DATA 2  
09.
REM DATA 3  
10.
REM DATA 4  
11.
REM DATA 5  
12.
REM DATA 6  
13.
REM DATA 7  
14.
REM DATA 8  
15.
REM DATA 9  
16.
REM DATA a  
17.
REM DATA b  
18.
REM DATA c  
19.
REM DATA d  
20.
REM DATA e  
21.
REM DATA f  
22.
REM DATA g  
23.
REM DATA h  
24.
REM DATA i  
25.
REM DATA j  
26.
REM DATA k  
27.
REM DATA l  
28.
REM DATA m  
29.
REM DATA n  
30.
REM DATA o  
31.
REM DATA p  
32.
REM DATA q  
33.
REM DATA r  
34.
REM DATA s  
35.
REM DATA t  
36.
REM DATA u  
37.
REM DATA v  
38.
REM DATA w  
39.
REM DATA x  
40.
REM DATA y  
41.
REM DATA z 
Bitte warten ..
Mitglied: DexXxtrin
19.07.2008 um 20:34 Uhr
Vielen Dank schon mal für deine Hilfe bis hier hin.
Noch eine Frage:
Kann ich auch 3 oder noch mehrere zusammenhängen?

So funktioniert es nicht:
01.
@echo off 
02.
 
03.
FOR /F "tokens=3 delims= " %%i in ('findstr /B "REM DATA" %0') do ( 
04.
FOR /F "tokens=3 delims= " %%j in ('findstr /B "REM DATA" %0') do ( 
05.
FOR /F "tokens=3 delims= " %%k in ('findstr /B "REM DATA" %0') do echo %%i%j%%k 
06.
07.
08.
 
09.
REM DATA  
10.
REM DATA 0  
11.
REM DATA 1  
12.
REM DATA 2  
13.
REM DATA 3  
14.
REM DATA 4  
15.
REM DATA 5  
16.
REM DATA 6  
17.
REM DATA 7  
18.
REM DATA 8  
19.
REM DATA 9  
20.
REM DATA a  
21.
REM DATA b  
22.
REM DATA c  
23.
REM DATA d  
24.
REM DATA e  
25.
REM DATA f  
26.
REM DATA g  
27.
REM DATA h  
28.
REM DATA i  
29.
REM DATA j  
30.
REM DATA k  
31.
REM DATA l  
32.
REM DATA m  
33.
REM DATA n  
34.
REM DATA o  
35.
REM DATA p  
36.
REM DATA q  
37.
REM DATA r  
38.
REM DATA s  
39.
REM DATA t  
40.
REM DATA u  
41.
REM DATA v  
42.
REM DATA w  
43.
REM DATA x  
44.
REM DATA y  
45.
REM DATA z
Bis zweistellig funktioniert es so, aber danach wird nur noch 0k ausgegeben (weiss nicht wie viele male) und dann 1k.
Der Sinn wäre aber, dass es 000,001,.... ausgibt...

EDIT:

Sry mein Fehler:

Habe ein % vergessen bei der dritten FOR Schleife vor dem j!
Klappt alles perfekt!
Vielen Dank!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...