3xplor3r
Goto Top

Gültigkeitsprüfungen von Variablen

Hallo,

ich habe in meiner kleinen Batch-Datei drei Variablen, die ich mehreren Gültigkeitsprüfungen unterziehen möchte. Mit dem Skript soll ein Projekt angelegt werden. Weiterhin benutze ich die Informationen später um Parameter zu setzen, die wiederum für Programmaufrufe notwendig sind.

(1) Projektnummer
(2) Projektname
(3) Projekttyp

Das sind die drei Variablen, die ich prüfen möchte.

(1) Die Projektnummer darf nur 4-stellig sein und nur aus Zahlen bestehen
(2) Hier ist eigentlich keine Prüfung notwendig, höchstens auf die maximal zulässige Gesamtlänge eines Ordnernamens und der Ausschluss von Sonderzeichen
(3) Hier sind nur die Zeichen E und I erlaubt, d. h. auch nur in Großbuchstaben

Ich habe schon ein bisschen probiert, bspw. mit set /a eine numerische Variable angelegt, um die Projektnummer zu prüfen. Alles zusammen hat es jedoch noch nicht den gewünschten Erfolg gebracht, bspw. die Länge der Projektnummer. Vielleicht könnt ihr mir etwas Inspiration geben.

LG

Content-ID: 183838

Url: https://administrator.de/forum/gueltigkeitspruefungen-von-variablen-183838.html

Ausgedruckt am: 09.03.2025 um 12:03 Uhr

Penny.Cilin
Penny.Cilin 20.04.2012 um 09:53:56 Uhr
Goto Top
Hallo,

bzgl. der Variablenexpansion mittels Set /A solltest Du
1
 SETLOCAL ENABLEDELAYEDEXPANSION 
aktivieren. Und daran denken, daß die Varibalen mit !<variable>! angesrpochen werden.
Dann sollte es funktionieren.
60730
60730 20.04.2012 um 09:58:37 Uhr
Goto Top
moin,

1) set /a naja -ok, aber so geht das einfacher in einem Rutsch

N:\>set "zahl=123r"

N:\>echo %zahl% |findstr [0-9][0-9][0-9][0-9] &&echo zahl

N:\>set "zahl=123"

N:\>echo %zahl% |findstr [0-9][0-9][0-9][0-9] &&echo zahl

N:\>set "zahl=1234"

N:\>echo %zahl% |findstr [0-9][0-9][0-9][0-9] &&echo zahl
1234
zahl
edit nicht hybsch, aber würgungsvoll
3)
echo %Projekttyp%| if not "%Projekttyp:~,2%" == "E" echo kein E oder mehr als zweistellig
echo %Projekttyp%| if not "%Projekttyp:~,2%" == "I" echo kein I oder mehr als zweistellig
/edit

Gruß
3xplor3r
3xplor3r 20.04.2012 um 10:57:41 Uhr
Goto Top
Das ist schonmal Spitze.

Eine Sache bleibt offen, wenn ich bsw. beim der Projekttyp einen Fehler feststelle, dann mit call den Block zur Eingabe nochmals aufrufe, einen richtigen Wert eingebe, schlägt die Prüfung dennoch fehl.

1
2
3
4
5
6
set /p "project_type=[Projekttyp]: "  
  ::Gueltigkeitspruefung
  if not "%projekt_type:~,2%" equ "E" (  
    echo Ungueltigkeit des Projekttypes 
    call :Projekttyp
  )
bastla
bastla 20.04.2012 um 11:35:24 Uhr
Goto Top
Hallo 3xplor3r!

Eigentlich ist es schwer vorstellbar, dass die ersten beiden Stellen der Eingabe (das bedeutet nämlich "~,2") aus einem einzelnen "E" bestehen face-wink - und wenn ohnehin nur der Typ eingegeben werden soll, kannst Du ja auch gleich mit
<code ty<pe="plain">if not "%projekt_type%" equ "E" (
prüfen ...

Soferne es übrigens egal wäre, ob "E" oder "e" eingegeben wurde, könntest Du "if /i" verwenden ...

Grüße
bastla
60730
60730 20.04.2012 um 11:41:32 Uhr
Goto Top
moin Schnucki....

set /p "project_type=[Projekttyp]: "
if not "%projekt_type:~,2%" equ "E" (

Tu mal die Plörre weg und nimm richtigen Kaffee....
3xplor3r
3xplor3r 20.04.2012 um 11:48:53 Uhr
Goto Top
1
2
3
4
5
6
set /p "project_type=[Projekttyp]: "  
  ::Gueltigkeitspruefung
  if not "%project_type:~,1%" == "E" (  
    echo Ungueltigkeit des Projekttypes 
    call :Projekttyp
  )

Trotz der kleinen Unaufmerksamkeit bleibt mir der Fehler erhalten, dass ich nur noch in den IF-Block springe egal was die Eingabe bringt.
60730
60730 20.04.2012 um 11:57:15 Uhr
Goto Top
hmmm.....

da hat Bastla eigentlich wie fast immer - recht...
Trotzdem...
"so teste ich sowas..
1
2
3
4
5
6
7
8
9
10
11
set /p "project_type=[Projekttyp]: "  
  ::Gueltigkeitspruefung
  if not "%project_type:~,1%" == "E" (  
    echo Ungueltigkeit des Projekttypes 
    call :Projekttyp
  )
goto :eof
:Projekttyp
echo  if not "%project_type:~,1%" == "E"  

:eof

und rauskommen tut dann...
N:\>set /p "project_type=[Projekttyp]: "
[Projekttyp]: E

N:\>if not "E" == "E" (
echo Ungueltigkeit des Projekttypes
 call :Projekttyp
)

N:\>goto :eof

N:\>C:\script\tester\123.cmd

N:\>set /p "project_type=[Projekttyp]: "
[Projekttyp]: e

N:\>if not "e" == "E" (
echo Ungueltigkeit des Projekttypes
 call :Projekttyp
)
Ungueltigkeit des Projekttypes

N:\>echo  if not "e" == "E"
 if not "e" == "E"

N:\>goto :eof

N:\>
3xplor3r
3xplor3r 20.04.2012 um 14:47:44 Uhr
Goto Top
Eure Beitrage habe mitunter geholfen den Fehler zu finden, danke.

1
2
3
4
5
6
7
8
9
:Projekttyp
set /p "project_type=[Projekttyp]: "  
  ::Gueltigkeitspruefung
  if not "%project_type%" == "E" (  
    if not "%project_type%" == "I" (  
      echo Ungueltigkeit des Projekttypes [E/I]
      call :Projekttyp
	)
  )

Bleibt nur noch (1) zu testen.
Skyemugen
Skyemugen 20.04.2012 um 14:57:32 Uhr
Goto Top
1
echo "%Zahl%" |findstr \"[0-9][0-9][0-9][0-9]\">nul && echo %Zahl% ist gueltig || echo %Zahl% ist ungueltig  
60730
60730 20.04.2012 um 15:51:01 Uhr
Goto Top
Zitat von @3xplor3r:
Bleibt nur noch (1) zu testen.

kleiner Tipp:

der Buchstabensalat von mir mit dem hellblauen Untergrund und den Zeilen, die mit n:\ beginnen, was könnte das sein?
Noch ein Tipp, es ist nicht der Lageplan vom heiligen Gral.
Skyemugen
Skyemugen 20.04.2012 um 16:48:34 Uhr
Goto Top
@t-mo,

kleiner Tipp:

fünfstellige Nummern werden bei dir auch gültig face-wink

(1) Die Projektnummer darf nur 4-stellig sein
pieh-ejdsch
pieh-ejdsch 20.04.2012 um 23:21:32 Uhr
Goto Top
moin,

echo "12"34"1234" |findstr \"[0-9][0-9][0-9][0-9]\">nul && echo %Zahl% ist gueltig || echo %Zahl% ist ungueltig

%Zahl% ist gueltig
(1) Die Projektnummer darf nur 4-stellig sein
set "zahl=1234"
echo %zahl%|findstr  /rc:"^[0-9][0-9][0-9][0-9]$" >nul && echo %Zahl% ist gueltig || echo %Zahl% ist ungueltig

1234 ist gueltig

ich wollt auch mal

Gruß Phil
bastla
bastla 20.04.2012 um 23:28:11 Uhr
Goto Top
@ph
... wobei sich dann aber vielleicht noch die Frage stellt, ob eher eine Eingabe
"12"34"1234"
oder
45&7
zu erwarten wäre ...

Ansonsten fände ich
findstr /x "[0-9][0-9][0-9][0-9]"
auch hübsch - bzw in der "Sicherheitsvariante":
echo "%zahl%"|findstr /x \"[0-9][0-9][0-9][0-9]\"
oder noch etwas robuster:
1
2
3
4
5
set "Fehler=true"  
setlocal enabledelayedexpansion
echo "!zahl!"|findstr /x \"[0-9][0-9][0-9][0-9]\" >nul && set "Fehler="  
endlocal & set "Fehler=%Fehler%"  
if defined Fehler goto ...
Grüße
bastla
pieh-ejdsch
pieh-ejdsch 20.04.2012 um 23:39:26 Uhr
Goto Top
moin bastla,

ich gehe absolut nicht davon aus, dass es mehr oder weniger möglich sein könnte einen Parameter Fälschlicherweise Durch den Stapel zu lassen.

Um nur dass Reinzulassen was auch darf, kommt es auf die Genauigkeit an.

Ich stell mir grad mein Email(le) Filter vor ..... face-wink

Gruß Phil