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-Key: 183838

Url: https://administrator.de/contentid/183838

Printed on: April 19, 2024 at 20:04 o'clock

Member: Penny.Cilin
Penny.Cilin Apr 20, 2012 at 07:53:56 (UTC)
Goto Top
Hallo,

bzgl. der Variablenexpansion mittels Set /A solltest Du
 SETLOCAL ENABLEDELAYEDEXPANSION 
aktivieren. Und daran denken, daß die Varibalen mit !<variable>! angesrpochen werden.
Dann sollte es funktionieren.
Mitglied: 60730
60730 Apr 20, 2012 at 07:58:37 (UTC)
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ß
Member: 3xplor3r
3xplor3r Apr 20, 2012 at 08:57:41 (UTC)
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.

set /p "project_type=[Projekttyp]: "  
  ::Gueltigkeitspruefung
  if not "%projekt_type:~,2%" equ "E" (  
    echo Ungueltigkeit des Projekttypes 
    call :Projekttyp
  )
Member: bastla
bastla Apr 20, 2012 at 09:35:24 (UTC)
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
Mitglied: 60730
60730 Apr 20, 2012 at 09:41:32 (UTC)
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....
Member: 3xplor3r
3xplor3r Apr 20, 2012 at 09:48:53 (UTC)
Goto Top
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.
Mitglied: 60730
60730 Apr 20, 2012 at 09:57:15 (UTC)
Goto Top
hmmm.....

da hat Bastla eigentlich wie fast immer - recht...
Trotzdem...
"so teste ich sowas..
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:\>
Member: 3xplor3r
3xplor3r Apr 20, 2012 at 12:47:44 (UTC)
Goto Top
Eure Beitrage habe mitunter geholfen den Fehler zu finden, danke.

: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.
Member: Skyemugen
Skyemugen Apr 20, 2012 at 12:57:32 (UTC)
Goto Top
echo "%Zahl%" |findstr \"[0-9][0-9][0-9][0-9]\">nul && echo %Zahl% ist gueltig || echo %Zahl% ist ungueltig  
Mitglied: 60730
60730 Apr 20, 2012 at 13:51:01 (UTC)
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.
Member: Skyemugen
Skyemugen Apr 20, 2012 at 14:48:34 (UTC)
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
Member: pieh-ejdsch
pieh-ejdsch Apr 20, 2012 at 21:21:32 (UTC)
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
Member: bastla
bastla Apr 20, 2012 at 21:28:11 (UTC)
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:
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
Member: pieh-ejdsch
pieh-ejdsch Apr 20, 2012 at 21:39:26 (UTC)
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