8.5k Aufrufe
Gefragt in WindowsXP von romero Mitglied (323 Punkte)
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?

24 Antworten

0 Punkte
Beantwortet von batti-batch Einsteiger_in (81 Punkte)
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
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
ja soweit ja,aber es sind immer nur 3 zahlen hinter den buchstaben.
0 Punkte
Beantwortet von batti-batch Einsteiger_in (81 Punkte)
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 https://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
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
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 [1] 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...
0 Punkte
Beantwortet von batti-batch Einsteiger_in (81 Punkte)
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
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
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?
0 Punkte
Beantwortet von batti-batch Einsteiger_in (81 Punkte)
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.

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 https://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
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
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 [b] (
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.
)
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
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?
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
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 [b] (
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...
...