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

Gültigkeitsprüfungen von Variablen

Frage Entwicklung Batch & Shell

Mitglied: 3xplor3r

3xplor3r (Level 1) - Jetzt verbinden

20.04.2012 um 09:50 Uhr, 2384 Aufrufe, 14 Kommentare

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
Mitglied: Penny.Cilin
20.04.2012 um 09:53 Uhr
Hallo,

bzgl. der Variablenexpansion mittels Set /A solltest Du
01.
 SETLOCAL ENABLEDELAYEDEXPANSION 
aktivieren. Und daran denken, daß die Varibalen mit !<variable>! angesrpochen werden.
Dann sollte es funktionieren.
Bitte warten ..
Mitglied: 60730
20.04.2012 um 09:58 Uhr
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ß
Bitte warten ..
Mitglied: 3xplor3r
20.04.2012 um 10:57 Uhr
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.

01.
set /p "project_type=[Projekttyp]: " 
02.
  ::Gueltigkeitspruefung 
03.
  if not "%projekt_type:~,2%" equ "E" ( 
04.
    echo Ungueltigkeit des Projekttypes  
05.
    call :Projekttyp 
06.
  )
Bitte warten ..
Mitglied: bastla
20.04.2012 um 11:35 Uhr
Hallo 3xplor3r!

Eigentlich ist es schwer vorstellbar, dass die ersten beiden Stellen der Eingabe (das bedeutet nämlich "~,2") aus einem einzelnen "E" bestehen - und wenn ohnehin nur der Typ eingegeben werden soll, kannst Du ja auch gleich mit
01.
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
Bitte warten ..
Mitglied: 60730
20.04.2012 um 11:41 Uhr
moin Schnucki....

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

Tu mal die Plörre weg und nimm richtigen Kaffee....
Bitte warten ..
Mitglied: 3xplor3r
20.04.2012 um 11:48 Uhr
01.
set /p "project_type=[Projekttyp]: " 
02.
  ::Gueltigkeitspruefung 
03.
  if not "%project_type:~,1%" == "E" ( 
04.
    echo Ungueltigkeit des Projekttypes  
05.
    call :Projekttyp 
06.
  )
Trotz der kleinen Unaufmerksamkeit bleibt mir der Fehler erhalten, dass ich nur noch in den IF-Block springe egal was die Eingabe bringt.
Bitte warten ..
Mitglied: 60730
20.04.2012 um 11:57 Uhr
hmmm.....

da hat Bastla eigentlich wie fast immer - recht...
Trotzdem...
"so teste ich sowas..
01.
set /p "project_type=[Projekttyp]: " 
02.
  ::Gueltigkeitspruefung 
03.
  if not "%project_type:~,1%" == "E" ( 
04.
    echo Ungueltigkeit des Projekttypes  
05.
    call :Projekttyp 
06.
07.
goto :eof 
08.
:Projekttyp 
09.
echo  if not "%project_type:~,1%" == "E" 
10.
 
11.
: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:\>
Bitte warten ..
Mitglied: 3xplor3r
20.04.2012 um 14:47 Uhr
Eure Beitrage habe mitunter geholfen den Fehler zu finden, danke.

01.
:Projekttyp 
02.
set /p "project_type=[Projekttyp]: " 
03.
  ::Gueltigkeitspruefung 
04.
  if not "%project_type%" == "E" ( 
05.
    if not "%project_type%" == "I" ( 
06.
      echo Ungueltigkeit des Projekttypes [E/I] 
07.
      call :Projekttyp 
08.
09.
  )
Bleibt nur noch (1) zu testen.
Bitte warten ..
Mitglied: Skyemugen
20.04.2012 um 14:57 Uhr
01.
echo "%Zahl%" |findstr \"[0-9][0-9][0-9][0-9]\">nul && echo %Zahl% ist gueltig || echo %Zahl% ist ungueltig
Bitte warten ..
Mitglied: 60730
20.04.2012 um 15:51 Uhr
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.
Bitte warten ..
Mitglied: Skyemugen
20.04.2012 um 16:48 Uhr
@T-Mo,

kleiner Tipp:

fünfstellige Nummern werden bei dir auch gültig

(1) Die Projektnummer darf nur 4-stellig sein
Bitte warten ..
Mitglied: pieh-ejdsch
20.04.2012 um 23:21 Uhr
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
Bitte warten ..
Mitglied: bastla
20.04.2012 um 23:28 Uhr
@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:
01.
set "Fehler=true" 
02.
setlocal enabledelayedexpansion 
03.
echo "!zahl!"|findstr /x \"[0-9][0-9][0-9][0-9]\" >nul && set "Fehler=" 
04.
endlocal & set "Fehler=%Fehler%" 
05.
if defined Fehler goto ...
Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
20.04.2012 um 23:39 Uhr
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 .....

Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Variablen Zusammenbauen 2.0 ( Batch ) (6)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst FOR Loop Variablen ( Batch ) (2)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

VB for Applications
Auswahlliste mit variablen (3)

Frage von Roadrunner777 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...