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

Prüfen ob Variable nur aus Zahlen besteht

Frage Entwicklung Batch & Shell

Mitglied: 77575

77575 (Level 1)

12.05.2013 um 21:37 Uhr, 1810 Aufrufe, 10 Kommentare

Hallo,

ich habe ein batch skript das mit 2 variablen aufgerufen werden soll.
wobei die erste variable ein zahl sein muss.
jetzt möchte ich prüfen ob die variable nur aus zahlen besteht. die variable besteht nicht nur aus einer zahl, sondern kann auch aus mehreren zahlen bestehen.

z. bsp. aufruf des skripts:
test.cmd 123 EinWort

mir geht es darum, wenn man sich verschreibt ein fehler ausgegeben wird oder keine zahl angegeben wird ich davon ausgehe das die erste Variable komplett fehlt und ich einen Hinweis ausgebe das die Variable 1 fehlt.

gruss
Mitglied: rubberman
12.05.2013 um 22:03 Uhr
Hallo 01-01-01,

etwa so:
01.
set "first=%1" 
02.
set "second=%2" 
03.
set "third=%3" 
04.
 
05.
if not defined first (echo kein Argument uebergeben) else ( 
06.
  if not defined second (echo nur ein Argument uebergeben) else ( 
07.
    if defined third echo zu viele Argumente uebergeben 
08.
09.
10.
 
11.
setlocal EnableDelayedExpansion 
12.
if defined first echo("!first!"|findstr /rxc:".[0-9][0-9]*." >nul || echo erstes Argument ist nicht numerisch 
13.
endlocal
Grüße
rubberman
Bitte warten ..
Mitglied: bastla
12.05.2013, aktualisiert um 22:25 Uhr
... oder als Alternative:
01.
@echo off & setlocal 
02.
set "OK=%~1" 
03.
for /f "delims=0123456789" %%i in ("%~1") do set "OK=" 
04.
if not defined OK echo Kein oder ungueltiger Parameter angegeben
Geprüft wird so, ob der erste Parameter ausschließlich aus den nach "delims=" angegebenen Ziffern besteht - indem alle Ziffern als Trennzeichen interpretiert werden, kann der Teil nach "do" nur ausgeführt werden, wenn der Parameter auch mindestens ein davon abweichendes Zeichen enthält.

Die Zuweisung des Parameters zur als "Flag" verwendeten Variablen %OK% sorgt dafür, dass auch ein Aufruf ohne Parameter erkannt wird, da dann %OK% von vornherein "not defined" ist ..

Grüße
bastla
Bitte warten ..
Mitglied: Endoro
12.05.2013, aktualisiert um 22:55 Uhr
Hallo 01-01-01,

hast du auch negative Zahlen? Das geht so:

01.
echo "%~1"| findstr /r "^.[1-9][0-9]*.$ ^.-[1-9][0-9]*.$ ^.0.$" && echo alles Zahlen || echo auch Buchstaben
Dieses erkennt führende Nullen als Buchstaben.

Gruss!
Bitte warten ..
Mitglied: 77575
13.05.2013 um 21:08 Uhr
Hallo,

vielen vielen Dank. Das hat mir sehr weitergeholfen.
Negative Zahlen gibt es nicht. Wenn ein Minus davor stehen würde, wäre es schon eine Falscheingabe.

Das ist mein fertiger Code (zum testen nur mit echo Ausgabe):

01.
@echo off & setlocal  
02.
set "PARAMETER1=%1" 
03.
set "PARAMETER2=%2" 
04.
set "PARAMETER1_OK=%~1" 
05.
 
06.
if (%1)==() if (%2)==() goto ALLE_FEHLEN 
07.
 
08.
for /f "delims=0123456789" %%i in ("%~1") do set "PARAMETER1_OK="  
09.
if not defined PARAMETER1_OK goto PARAMETER1_FEHLT 
10.
 
11.
if (%2)==() goto PARAMETER2_FEHLT 
12.
 
13.
goto PARAMETER_PASSEN 
14.
 
15.
:PARAMETER1_FEHLT 
16.
	echo Syntax falsch				 
17.
pause 
18.
goto ENDE 
19.
 
20.
:PARAMETER2_FEHLT 
21.
	echo parameter 2 fehlt 
22.
pause 
23.
goto ENDE 
24.
 
25.
:ALLE_FEHLEN 
26.
	echo keine Paramter angegeben 
27.
pause 
28.
goto ENDE 
29.
 
30.
:PARAMETER_PASSEN 
31.
	echo beide paramterpassen: 
32.
	echo Parameter 1 = %PARAMETER1% 
33.
	echo Paramater 2 = %PARAMETER2% 
34.
pause 
35.
goto ENDE 
36.
 
37.
:ENDE 
38.
 
Jetzt würde ich gern noch den Parameter 2 prüfen. der Parameter 2 muss einem Wort aus einer Textdatei entsprechen.
In der Textdatei stehen pro Zeile ein Begriff.
z. Bsp.
Aachen
München
Berlin
Hamburg
Frankfurt

Jetzt soll geprüft werden das Parameter 2 genau eines dieser Worte ist.
So das z. Bsp. der falschgeschrieben Begriff Berliin zu einem Fehler führt.

gruss 01
Bitte warten ..
Mitglied: rubberman
13.05.2013 um 21:17 Uhr
Hallo 01-01-01,

FINDSTR könnte auch hier weiterhelfen.
01.
findstr /xc:"%2" "liste.txt" >nul || echo Nicht in der Liste.
Grüße
rubberman
Bitte warten ..
Mitglied: bastla
13.05.2013, aktualisiert um 22:01 Uhr
bzw etwas sicherer (und damit "/c:" Sinn macht ):
findstr /xc:"%~2" "liste.txt" >nul || echo Nicht in der Liste.
und eventuell auch "/ixc:" ...
BTW:
if (%1%2)==() goto ALLE_FEHLEN
wäre immer noch zu viel (ohne Parameter 1 gibt es auch keinen Parameter 2) ...

Grüße
bastla
Bitte warten ..
Mitglied: 77575
14.05.2013 um 18:05 Uhr
Hallo,

das funktioniert nicht.
er zeigt mir immer an "Nicht in der Liste.", auch wenn ich den Parameter richtig angebe.

gruss 01
Bitte warten ..
Mitglied: bastla
14.05.2013 um 18:25 Uhr
Hallo 01-01-01!

Mögliche Fehlerquellen:
  • Du verwendest nicht "/ixc:" - dann wird auch Groß-/Kleinschreibung unterschieden.
  • Wenn der Parameter Umlaute ("München") enthält, müsste die Liste im ASCII-Format vorliegen.
  • In der Liste gibt es Leerzeichen oder TABs an Beginn oder Ende der Zeile (verglichen wird immer die gesamte Zeile).

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
14.05.2013, aktualisiert um 18:35 Uhr
Hallo Zusammen.

Und noch eine potenzielle Fehlerquelle:
Der Zeichensatz der Textdatei ist nicht ASCII / ANSI, sondern UTF-8 oder Unicode ...

Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
14.05.2013 um 22:02 Uhr
Zitat von 77575:
das funktioniert nicht.
er zeigt mir immer an "Nicht in der Liste.", auch wenn ich den Parameter richtig angebe.
poste den/die Text(e)/-teil(e) oder lade ihn/sie auf Pastebin.

Gruss!
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Variable auf Inhalt prüfen (1)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...