online 1
gast (50)

/ Forum / WindowsXP

WindowsXPWindowsXP

Fragevon Romero vom 25.02.2021, 19:19 Options

IF problem

servus,

ich nochmal. wenn ich mit der IF-abfrage folgendes abfrage, wie mach ich das am besten?

also es wird ein bereich mittels set angegeben:z.b. aa123oder a123.
nun soll er aber abfragen,wenn bereich = aa* (also es sind immer danach 3 zahlen von 0-9),dann "dasunddas",ansonsten,wenn bereich = a*,dann "dasunddas",sonst FEHLER usw.

und wie kann ich ihm sagen,das er dann das "a"groß schreiben soll?


Antwort schreiben

Antwort 1 von jofischi vom 25.02.2021, 20:02 Options

Bist du sicher hier im richtigen Unterforum zu sein?
Wovon sprichst du eigentlich?

Antwort 2 von batti-batch vom 25.02.2021, 21:56 Options

Hallo Romero,


das Problem lässt sich mit mit einem relativ einfachen Programm sehr leicht lösen.

Um die Wirkungsweise zu verdeutlichen, habe ich die Ausgabe der Werte etwas umfangreicher ausgestaltet.

Bei der Umwandlung von a in A wird jedes a berücksichtigt, also auch solche, die sich an anderer Stelle des Variablenwertes befinden.

Die Zuweisung des Wertes für die Variable kannst Du im SET-Block vornehmen.

@ECHO off
SETLOCAL


REM
REM Testprogramm
REM Test, ob einfaches oder doppeltes a am Anfang
REM eines Variablenwertes steht  

REM http://www.supportnet.de/t/2211287
REM
REM (c) batti-batch 02/2009
REM
REM getestet unter Windows 2000


REM ************************ SET-Block Beginn ************************

REM Variable, die am Anfang ein einfaches 
REM oder doppeltes a haben kann
SET "bereich_1=aa123"

REM ************************ SET-Block Ende **************************


REM a in A umwandeln
SET "bereich_1a=%bereich_1:a=A%"


REM Zweifaches A vorhanden?
SET "bereich_1b=%bereich_1a:~0,2%"
IF [%bereich_1b%] EQU [AA] GOTO :zweifaches_a


REM Einfaches A vorhanden? 
SET "bereich_1b=%bereich_1a:~0,1%"
IF [%bereich_1b%] EQU [A] GOTO :einfaches_a


REM Weiter zur Fehlerbehandlung
GOTO :fehler


:zweifaches_a
ECHO Erfolg: Zweifaches A am Anfang der Variablen
ECHO "%bereich_1a%" gefunden.
ECHO Der Originalwert der Variablen war %bereich_1%.
GOTO :eof


:einfaches_a 
ECHO Erfolg: Einfaches A am Anfang der Variablen 
ECHO "%bereich_1a%" gefunden.
ECHO Der Originalwert der Variablen war %bereich_1%.
GOTO :eof


:fehler
ECHO Fehler: Es wurde eine andere Zeichenfolge 
ECHO am Anfang der Variablen "%bereich_1%" gefunden.


Es wäre nett, wenn Du Bescheid gibst, ob das Programm Dein Problem gelöst hat.


Viel Spaß beim Testen.

Herzliche Grüße
batti-batch

Antwort 3 von Romero vom 26.02.2021, 21:10 Options

kannst du mir das mal in meins einbinden bitte?

ab "eingabe des bereichs" bzw ab dem befehl SET bis GOTO Suche

wäre das möglich?vielen dank bis dahin.


@ECHO OFF

:: Eingabe des Flugzeugtyps

:Eingabe
CLS
SET Flugzeug=
SET Typ=
SET Bereich=
SET Sektion=

SET /P Typ=Bitte geben Sie den Flugzeugtyp an:
IF [%Typ%]==[] GOTO Eingabe
GOTO Auslesen

:: Datenabgleich

:Auslesen
IF /I %Typ%==A332 (
SET Flugzeug=A330-200
) ELSE IF /I %Typ%==A333 (
SET Flugzeug=A330-300
) ELSE IF /I %Typ%==A340 (
SET Flugzeug=A340
) ELSE IF ERRORLEVEL 1 (
ECHO Fehler
) ELSE GOTO Fehler

:: Eingabe des Bereichs

SET /P Bereich=Bitte geben Sie den Bereich an:
GOTO Suche


:: Ordnersuche

:Suche
ECHO.
ECHO Flugzeugtyp: %Flugzeug%
ECHO Bereich :%Bereich%
ECHO Sektion: %Sektion%
ECHO.
ECHO Sind die Daten korrekt eingeben?
ECHO.
ECHO.

:Ordner
cd /D D:\save\Olutex\%Flugzeug%\
dir /B *.txt > STL_%Typ%_%Bereich%.txt
move STL_%Typ%_%Bereich%.txt D:\save\Olutex

cd /D D:\save\Olutex\
Excel-Export.vbs /input:D:\save\Olutex\%FZ%\Sekt13-14.xls /worksheet:Ber_%Bereich% /output:D:\save\Olutex\%FZ%\STL_%Flugzeugtyp%_%Bereich%.txt

GOTO Ende
PAUSE

:: Ausgabe Fehlermeldung

:Fehler
ECHO Der angegebene Flugzeugtyp existiert nicht. Bitte ueberpruefen Sie ihre Eingabe!
PAUSE
GOTO Eingabe

:: Ende

:Ende
PAUSE
GOTO Eingabe

Antwort 4 von batti-batch vom 27.02.2021, 12:17 Options

Hallo Romero,


hier mal eine Version, die Du in Dein Script einbauen könntest.

Das Programm ist alleine lauffähig, damit Du es zunächst in Ruhe Deinen Tests unterziehen kannst.

Wenn alles Deinen Vorstellungen entspricht und beide Scripts für sich fehlerfrei laufen (das solltest du wirklich gründlich testen!), kannst Du es ab der gestrichelten Linie in Dein Script einbinden und dann erneut testen.

Hier das Script:

@ECHO off
SETLOCAL


REM
REM Testprogramm
REM Test, ob einfaches oder doppeltes a am Anfang
REM eines Variablenwertes steht
REM Version 2  

REM http://www.supportnet.de/t/2211287
REM
REM (c) batti-batch 02/2009
REM
REM getestet unter Windows 2000


REM ************************ SET-Block Beginn ************************

REM ************************ SET-Block Ende **************************


REM --------------------- siehe Begleittext --------------------------


:: Eingabe des Bereichs
:bereich

REM Eingabe eines Wertes, der am Anfang ein einfaches 
REM oder doppeltes a haben kann


ECHO Bitte geben Sie den Bereich ein^! 
ECHO.
ECHO Es sind folgende Werte erlaubt: 
ECHO (hier solltest Du die moeglichen Eingaben auffuehren)
ECHO oder "E" fuer Ende eingeben
ECHO.
SET /p "bereich=Bitte Ihre Eingabe: "


REM Zurueckweisen einer leeren Eingabe
REM Ruecksprung zur Eingabe
IF [%bereich%] EQU [] GOTO :bereich


REM "E" fuer Programmende eingegeben
REM Programm beenden
SET "ende=%bereich:~0,1%"
IF [%ende%] EQU [%bereich%] IF [%ende%] EQU [E] (ECHO Programmende & GOTO :eof)


REM a in A umwandeln
SET "bereich=%bereich:a=A%"


REM Zweifaches A vorhanden?
SET "bereich_1=%bereich:~0,2%"
IF [%bereich_1%] EQU [AA] GOTO :zweifaches_a


REM Einfaches A vorhanden? 
SET "bereich_1=%bereich:~0,1%"
IF [%bereich_1%] EQU [A] GOTO :einfaches_a


REM Fehlerbehandlung
REM Ruecksprung zur Eingabe
GOTO :bereich


:zweifaches_a
ECHO Zweifaches A gefunden
GOTO :suche


:einfaches_a 
ECHO Einfaches A gefunden

:suche


Ich habe die Abschnitte ":einfaches_a" und ":zweifaches_a" im Programm belassen, damit Du hier einen Ansatz hast, falls Du weitere Ergänzungen vornehmen möchtest.

Der Anwender des Programm hat hier die Möglichkeit, durch Eingabe des Großbuchstabens "E" das Programm gezielt zu verlassen; eine Möglichkeit, die Du auch bei den anderen Abfragen vorsehen kannst.

Du siehst also, das es mit einem einfachen Kopieren hier keineswegs getan ist sondern sich zahlreiche Möglichkeiten der Optimierung anbieten. Aber ich will Dir nicht gleich alles verraten, denn Übung macht den Meister.


Viel Spaß beim Testen.

Herzliche Grüße
batti-batch

Antwort 5 von Romero vom 27.02.2021, 20:08 Options

also muss sagen,datt funzt wunderbar...

vielen dank dafür,aber es geht ja weiter :D

habs bissl umgeschrieben,so das er,wenn er nur zahlen eingibt das er ne fehlermeldung bringt (muss ja noch ausgebaut werden).aber wie kann ich ihm verklickern,dass wenn er mehr als 3aaa's oder so eingibt,dann ebenfalls ne fehlermeldung rausgibt.gehtd das irgendwie?und was hat das hinter dem bereich mit dem ~0,1% bzw ~0,2% zu tun?das versteh ich nicht?

und wie kann ich sagen das dahinter immer 3 zahlen kommen?egal welche...das auch über dieses verfahren wie mit dem "a"?

Antwort 6 von Romero vom 27.02.2021, 20:12 Options

gibts eigentlich n ODER-befehl bei IF?brauch den nämlich

Antwort 7 von batti-batch vom 27.02.2021, 21:15 Options

Hallo Romero,


einen "ODER"-Befehl im wortwörtlichen Sinne gibt es nicht, wohl aber eine ELSE-Klausel, die Deiner Erwartung am ehesten entsprechen dürfte. Schau doch mal in der Hilfe des IF-Befehls nach.

Das mit den drei (oder mehr) a am Anfang ist ein Problem...
Wie sehen denn diese Bereichseingaben aus? Wieviele sind das? Ist deren Anzahl und Wert (also auch die Länge... )variabel? Sind es nur eine Handvoll oder ein paar mehr?
Wenn es eine feste unveränderliche Menge wäre, wäre es ideal...

Das wären hilfreiche Angaben, denn danach könnte man sich Gedanken wegen einer Lösung machen...

Herzliche Grüße
batti-batch

Antwort 8 von Romero vom 28.02.2021, 17:11 Options

erstmal vielen dank,das du mir dabei hilfst.

das mit dem else hab ich schon gelesen,dachte es gibt so n "befehl" wie not und and (2 ifs-vergleiche hintereinander).

also es sind entweder 1 oder 2 buchstaben und dahinter sind immer 3 zahlen,egal welche.meistens beginnend mit einer 0 gefolgt von weiteren 2 zahlen.

es gibt zwar 2,3 spezielle bereiche die 3 oder 4 zahlen haben,aber die kann ich dann individuell gestalten.die buchstaben gehen von a bzw aa bis hin zu s bzw ss,also fast das ganze alphabet.

kann man das nicht irgendwie vorher definieren?also das man sagt,die und die bereiche gibt es bzw die speziellen.

also es soll so aussehen,das wenn einer einen wert eingibt,also z.b. dd089 (so sehen sie halt aus) oder d090 dann soll er bei doppelbuchstaben einen SET=... machen bzw einen bei einfachen buchstaben.die zahlen dahinter liest er aus einer exceltabelle aus,das was du schon gesehen hast.also sie ist variabel in der eingabe.

dachte mir da an sowas:

SET /P bereich=bereich eingeben:

SET bereich_11=AA*** (sterne sollen für die verschiedenen "3" zahlen stehen)
SET bereich_22=BB*** usw.
SET bereich_1=A*** usw.

dann:

IF bereich=bereich_11 (
SET=irgendwas
) ELSE IF bereich=bereich_22 (
SET=irgendwas
) ELSE IF bereich=bereich_44 (
SET=irgendwas
) ELSE ... (
SET=...
) ELSE Fehler (wenn angebener bereich nicht vorhanden ist bzw falsch geschrieben wurde (mit den buchstaben))

die andere fehlermeldung kommt ja von der exceltab.

Antwort 9 von Romero vom 28.02.2021, 17:17 Options

diese doppelbuchstaben und die speziellen bereiche gehören zu einem oberbereich,die anderen zu dem anderen oberbereich.

Antwort 10 von Romero vom 28.02.2021, 18:47 Options

hab was gefunden:

also wenn es mehr als 5 stellen sind,und so es auch bei den 4 oder halt mehr stellen...

@ECHO off

:abc

SET /P name=name eingeben:
IF %name% GTR %name:~0,5% (
ECHO zu gross
) ELSE ECHO genau richtig

GOTO abc
PAUSE

Antwort 11 von batti-batch vom 28.02.2021, 20:12 Options

Hallo Romero,


lassen wir erstmal alles andere beiseite und klären das Grundsätzliche:

Es geht um eine Zeichenfolge, die am Anfang ein oder zwei Buchstaben hat, denen drei bis vier Ziffern folgen.

also zum Beispiel:

a123
x456
dd1234
zz5678

Habe ich Dich da richtig verstanden?


Herzliche Grüße
batti-batch

Antwort 12 von Romero vom 01.03.2021, 12:44 Options

ja soweit ja,aber es sind immer nur 3 zahlen hinter den buchstaben.

Antwort 13 von batti-batch vom 01.03.2021, 16:00 Options

Hallo Romero,


hier ein Testprogramm, das Dir anzeigt, welches Zeichen an welcher Position eingegeben wurde und ob dieses Zeichen an der entsprechenden Position auch gültig ist.

Anmerkungen:
(1) Die Zählung der Zeichenposition beginnt grundsätzlich bei 0 (Null).
(2) Die verzögerte Variablenauflösung ist eingeschaltet.
(3) Grenzen des Programms: ungültige Zeichen (Klammern, <, | usw.) können nicht abgefangen werden.


@ECHO off
SETLOCAL enabledelayedexpansion


REM
REM Testprogramm
REM Laenge der Zeichenfolge testen
REM Gleichzeitig ermitteln, ob gueltige Zeichen an den
REM entsprechenden Positionen stehen
REM Version 1

REM Achtung:
REM Ungültige Zeichen (Klammern, <, | usw.) können nicht abgefangen werden.

REM http://www.supportnet.de/t/2211287
REM
REM (c) batti-batch 02/2009
REM
REM getestet unter Windows 2000


REM ************************ SET-Block Beginn ************************

REM ************************ SET-Block Ende **************************


:: Eingabe des Bereichs
:bereich

CLS

ECHO Bitte geben Sie den Bereich
ECHO.
ECHO oder "E" fuer Ende ein^^!
ECHO.
SET /p "bereich=Bitte Ihre Eingabe: "
ECHO.

REM Zurueckweisen einer leeren Eingabe
REM Ruecksprung zur Eingabe
IF [%bereich%] EQU [] GOTO :bereich


REM "E" fuer Programmende eingegeben
REM Programm beenden
SET "ende=^%bereich:~0,1%"
IF [%ende%] EQU [%bereich%] IF [%ende%] EQU [E] (
ECHO Programmende & GOTO :eof
)


REM Laenge der Zeichenfolge testen
REM Gleichzeitig ermitteln,
REM ob Buchstaben und Ziffern an den
REM entsprechenden Positionen stehen
FOR /l %%a IN (0,1,5) DO (


REM Position des Zeichens ausgeben
REM Nicht vergessen: Die Zaehlung beginnt bei Null!
ECHO Position des Zeichens: "%%a"


REM Eingegebene Zeichenfolge zerlegen
REM Einzelnes Zeichen mit SET /a der Variable
REM "zifferntest" zuweisen
SET "test=!bereich:~%%a,1!
IF [!test!] NEQ [] SET /a "zifferntest=!test!"

IF [%%a] EQU [0] IF [!test!] EQU [!zifferntest!] (
ECHO Ziffer "!test!" an Position 0 ^(Fehler^^!^)
) ELSE (
ECHO Buchstabe "!test!" an Position 0 ^(OK^)
)

IF [%%a] EQU [1] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 1 ^(OK^)
) ELSE (
ECHO Ziffer "!test!" an Position 1 ^(auch OK^)
)

IF [!test!] NEQ [] IF [%%a] EQU [2] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 2 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 2 ^(OK^)
)

IF [!test!] NEQ [] IF [%%a] EQU [3] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 3 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 3 ^(OK^)
)

IF [!test!] NEQ [] IF [%%a] EQU [4] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 4 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 4 ^(OK^)
)


REM Laenge der eingegebenen Zeichenfolge ungueltig
IF [%%a] EQU [5] IF [!test!] EQU [] (
ECHO Kein Zeichen an Position 5 gefunden. ^(OK^)
) ELSE (
ECHO Fehler^^!
ECHO Zeichen "!test!" an Position 5 gefunden.
ECHO Die Eingabe hat eine ungueltige Laenge^^!
)
ECHO.
)


Das Programm dient nur zum Test; zum Einbau in Dein Script muss es angepasst werden.


Viel Spaß beim Testen.

Herzliche Grüße
batti-batch

Antwort 14 von Romero vom 02.03.2021, 19:00 Options

eyh alter,du bist echt krass.das ist genau das was ich meinte...bist echt n knaller.vielen dank bis hier her...werde das ganze noch bisschen umschreiben bzw meinem script anpassen...

aber wie kann ich dem sagen das die ersten beiden buchstaben,sofern sie angegeben wurden,gleich sein müssen?kann ich da,wo die 1 steht...

IF [%%a] EQU [0] IF [!test!] EQU [!zifferntest!] (
ECHO Ziffer "!test!" an Position 0 ^(Fehler^^!^)
) ELSE (
ECHO Buchstabe "!test!" an Position 0 ^(OK^)
)

IF [%%a] EQU [[b]1[/b]] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 1 ^(OK^)
) ELSE (
ECHO Ziffer "!test!" an Position 1 ^(auch OK^)

... ne 0 drauss machen,so das er das dann als gleichen doppelbuchstaben frist?

und wie kann ich spezielle eingaben deklarieren.einfach noch n IF dransetzten mit der speziellen bezeichnung?also es geht um die genaue bezeichung BCRC+3 zahlen...

Antwort 15 von batti-batch vom 02.03.2021, 21:28 Options

Hallo Romero,


wenn die ersten beiden Buchstaben gleich sein sollen, kann man mit einem IF-Vergleich die Richtigkeit überprüfen; eine automatische Verdoppelung des ersten Buchstabens würde ich nicht vorschlagen. Damit erzwingt man eine gewisse Sorgfalt bei der Eingabe durch den User.

Wenn es spezielle Bereiche gibt, die wirklich nur ein einziges Mal vorkommen, kannst Du die ebenfalls mit einem IF-Vergleich auf die korrekte Eingabe prüfen.

Das solltest Du mit den vorhandenen Beispielen recht einfach hinbekommen.

Probiere es mal aus; zeig was Du erreicht hast.
Scheue Dich nicht davor, zu fragen.


Viel Erfolg.

Herzliche Grüße
batti-batch

Antwort 16 von Romero vom 05.03.2021, 12:36 Options

kann dir morgen mal das ding mal zeigen.

nur das mit dem vergleich,wenn die beiden gleich sein sollen,kriege ich nicht hin.

und wie kann ich das schreiben,dass bei den bereichen z.b. wenn 1 buchstabe vorhanden ist und 3 zahlen,das dann ab der 4. stelle keine zahlen mehr kommen soll?

nach dem was du geschrieben hast,was absolut genial ist,kann ich bereiche mit a1234 angeben ohne das er rummeckert.

kann ich ihm sagen,das:

IF [%%a] EQU [0] IF [!test!] NEQ [!zifferntest!] IF [%%a] EQU [1] IF [!test!] EQU [!zifferntest!] ... IF [ %%a] EQU [4] IF [!test!] EQU [!zifferntest!] (ECHO Fehler)

geht so was?also das er dann nochmal das ganze durchlaufen lässt?

Antwort 17 von batti-batch vom 06.03.2021, 09:24 Options

Hallo Romero,


wenn beide Anfangsbuchstaben der Variable "bereich" gleich sein sollen, kannst Du das mit IF prüfen. Du musst nur das erste und das zweite Zeichen dieses Variablenwertes nehmen und vergleichen. Das ist nicht weiter schwer.

Zitat:
und wie kann ich das schreiben,dass bei den bereichen z.b. wenn 1 buchstabe vorhanden ist und 3 zahlen,das dann ab der 4. stelle keine zahlen mehr kommen soll?

Dann müsstest Du untersuchen, ob an der ersten Stelle ein Buchstabe und an der zweiten Stelle eine Ziffer steht. Wenn das der Fall ist, darf die Länge der Eingabe 4 Zeichen nicht überschreiten. Das bedeutet, das an der 5. Position kein Zeichen mehr stehen darf. Dabei gehen wir davon aus, das Leerzeichen in der Variable "bereich" nicht vorkommen. Diese müssten unmittelbar nach der Eingabe abgefangen werden.

Für das Abfangen der Leerzeichen habe ich Dir ein kleines Testprogramm erstellt:

@ECHO off
SETLOCAL

CLS

REM Testprogramm
REM Eingabe mit Leerzeichen abfangen

REM http://www.supportnet.de/t/2211287
REM
REM (c) batti-batch 03/2009
REM
REM getestet unter Windows 2000


SET /p "bereich=Bitte Ihre Eingabe: "

REM Zum Erkennen von Leerzeichen am Anfang und
REM am Ende der Eingabe wird jeweils ein Buchstabe
REM vorangestellt und angehaengt 
SET "eingabetest=x%bereich%y"
ECHO.
ECHO.
ECHO Auswertung der Eingabe:
ECHO.
FOR /f "tokens=1-2 delims= " %%i IN ("%eingabetest%") DO (

	ECHO Token 1: %%i
	ECHO Token 2: %%j
	ECHO.
	SET "bereich_2=%%j"
	IF DEFINED bereich_2 (
		ECHO Es war mindestens ein Leerzeichen dabei^!
	) ELSE (
		ECHO Es war kein Leerzeichen dabei.
	)
)


Ich empfehle Dir, beide Prüfungen zunächst in kleinen Programmen umzusetzen und diese ausgiebig zu testen. Wenn alles rund läuft, kannst Du beide im Hauptprogramm unterbringen.


Viel Spaß beim Testen.

Herzliche Grüße
batti-batch

Antwort 18 von Romero vom 06.03.2021, 11:25 Options

also das was du geschrieben hast,müsste ich vor der eigentlichen prüfung der länge schreiben?

das mit dem variablen an der 4. oder x. stelle kapier ich noch nicht.

hattest das so geschrieben,dass es max 5 stellen hat,nach der 5. stelle keins mehr kommt.soweit läuft es super und bin hellauf begeistert.

nur das z.b. einmal das ganze für einen typen a123 vorkommen kann aber zum anderen auch ein a1b234 vorkommen könnte.wenn ich das also bis zur 6.stelle schreibe,dann ist es bei mir so,dass er auch bei den normalen bereich einen bereich ausgeben kann,dass z.b. so lautet: a123456 und das ist halt falsch.

kann ich da 2 schleifen in einander verschachteln?also das einmal das eine durchlaufen wird.wenn die angabe größer ist als 4 stellen geht er zur 2. schleife.

bisher habe ich es so geschrieben:
wird mit CALL aufgerufen.

FOR /l %%a IN (0,1,5) DO (


REM Position des Zeichens ausgeben
REM Nicht vergessen: Die Zaehlung beginnt bei Null!
ECHO Position des Zeichens: "%%a"


REM Eingegebene Zeichenfolge zerlegen
REM Einzelnes Zeichen mit SET /a der Variable
REM "zifferntest" zuweisen
SET "test=!bereich:~%%a,1!
IF [!test!] NEQ [] SET /a "zifferntest=!test!"

IF [%%a] EQU [0] IF [!test!] EQU [!zifferntest!] (
ECHO Ziffer "!test!" an Position 0 ^(Fehler^^!^)
) ELSE (
ECHO Buchstabe "!test!" an Position 0 ^(OK^)
)

IF [%%a] EQU [1] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 1 ^(OK^)
) ELSE (
ECHO Ziffer "!test!" an Position 1 ^(auch OK^)
)

IF [%%a] EQU [2] IF [!test!] EQU [l] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [a] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [c] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [d] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [e] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [!test!] NEQ [] IF [%%a] EQU [2] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 2 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 2 ^(OK^)
)

IF [!test!] NEQ [] IF [%%a] EQU [3] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 3 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 3 ^(OK^)
)

IF [!test!] NEQ [] IF [%%a] EQU [4] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 4 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 4 ^(OK^)
)


REM Laenge der eingegebenen Zeichenfolge ungueltig
IF [%%a] EQU [5] IF [!test!] EQU [] (
ECHO Kein Zeichen an Position 5 gefunden. ^(OK^)
) ELSE (
ECHO Fehler^^!
ECHO Zeichen "!test!" an Position 5 gefunden.
ECHO Die Eingabe hat eine ungueltige Laenge^^!
)
ECHO.
)

Antwort 19 von Romero vom 07.03.2021, 08:15 Options

um für mich das nochmal zu verstehen.

die schleife FOR gibt an,dass die eingabe,welche mit %%a zerlegt wird,von punkt 0 startet,um jeweils 1 stelle vorran geht und bei 5 endet.dabei wird,wenn eine zahl sprich variable enthalten ist,die eingabe bzw. das zeichen in einen zifferntest zerlegt.

nun läuft die schleife durch und überprüft an jeder stelle,ob da ein buchstabe oder variable steht.wenn diese an der 5. stelle angekommen ist,dann hört sie auf und die schleife ist beendet.

ist das so richtig?

aber wie kann man der schleife sagen,das er gleichzeitig 2 stellen untersuchen soll?

Antwort 20 von Romero vom 07.03.2021, 09:44 Options

hab jetzt 3 schleifen in einander verschachtelt.soweit klappt das auch,das er einmal wenn man zahlen eingibt ne andere schleife durchlaufen und was anderes ausgegeben wird,als wenn man buchstaben ausgibt.nun mein problem:

das ist mein script:

FOR /l %%a IN (0,1,2) DO (


REM Position des Zeichens ausgeben
REM Nicht vergessen: Die Zaehlung beginnt bei Null!
ECHO Position des Zeichens: "%%a"


REM Eingegebene Zeichenfolge zerlegen
REM Einzelnes Zeichen mit SET /a der Variable
REM "zifferntest" zuweisen
SET "test=!bereich:~%%a,1!
IF [!test!] NEQ [] SET /a "zifferntest=!test!"


IF [%%a] EQU [0] IF [!test!] EQU [!zifferntest!] (
ECHO Ziffer "!test!" an Position 0 ^(Fehler^^!^)
) ELSE (
ECHO Buchstabe "!test!" an Position 0 ^(OK^)
)


IF [%%a] EQU [1] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 1 ^(OK^)
) ELSE IF [%%a] EQU [1] IF [!test!] EQU [r] (
ECHO Buchstabe "!test!" an Position 1 ^(OK^)
) ELSE (
ECHO Ziffer "!test!" an Position 1 ^(auch OK^)
)


IF [!test!] NEQ [] IF [%%a] EQU [2] IF [!test!] EQU [!zifferntest!] (
ECHO Ziffer "!test!" an Position 2 ^(OK^)
FOR /l %%a IN (3,1,4) DO (

ECHO Position des Zeichens: "%%a"

IF [!test!] NEQ [] IF [%%a] EQU [3] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 3 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 3 ^(OK^)
)

REM Laenge der eingegebenen Zeichenfolge ungueltig
IF [%%a] EQU [4] IF [!test!] EQU [] (
ECHO Kein Zeichen an Position 4 gefunden. ^(OK^)
) ELSE (
ECHO Fehler^^!
ECHO Zeichen "!test!" an Position 4 gefunden.
ECHO Die Eingabe hat eine ungueltige Laenge^^!
)
ECHO.
)


) ELSE IF [!test!] NEQ [] IF [%%a] EQU [2] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
FOR /l %%a IN (3,1,6) DO (

ECHO Position des Zeichens: "%%a"

IF [%%a] EQU [2] IF [!test!] EQU [a] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [c] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [d] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [e] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [l] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
) ELSE IF [%%a] EQU [2] IF [!test!] EQU [r] (
ECHO Buchstabe "!test!" an Position 2 ^(OK^)
)

IF [!test!] NEQ [] IF [%%a] EQU [3] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 3 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 3 ^(OK^)
)

IF [!test!] NEQ [] IF [%%a] EQU [4] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 4 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 4 ^(OK^)
)

IF [!test!] NEQ [] IF [%%a] EQU [5] IF [!test!] NEQ [!zifferntest!] (
ECHO Buchstabe "!test!" an Position 5 ^(Fehler^^!^)
) ELSE (
ECHO Ziffer "!test!" an Position 5 ^(OK^)
)


REM Laenge der eingegebenen Zeichenfolge ungueltig
IF [%%a] EQU [6] IF [!test!] EQU [] (
ECHO Kein Zeichen an Position 6 gefunden. ^(OK^)
) ELSE (
ECHO Fehler^^!
ECHO Zeichen "!test!" an Position 6 gefunden.
ECHO Die Eingabe hat eine ungueltige Laenge^^!
)
ECHO.
)
)
)

wenn man da z.b. abc123 oder a123 eingibt,dann sind bei den ausgaben der 2 weiteren schleifen entweder an der 3. stelle (mit den buchstaben) ein c oder (bei den zahlen) die 2.
und das ist an der (von 0 ausgehend) 3. bis x.stelle so.also weiß da nicht wo der fehler liegt...

Ähnliche Themen

Problem
Ueli  23.10.2007 - 92 Hits - 1 Antwort

Problem mit Bluetooth und Windows SP2
Jouli  06.11.2008 - 2654 Hits -

MPU 401 Problem (Code 12) IRQ Problem...
Adrium  04.01.2009 - 371 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026