Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 1854 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 ..
Ähnliche Inhalte
JavaScript
Skript schlägt fehl - nur Zahlen werden gespeichert (3)

Frage von Ah3n0bar6us zum Thema JavaScript ...

Batch & Shell
gelöst Mit zusammengesetzter Variable auf andere Variable zugreifen (2)

Frage von abiber zum Thema Batch & Shell ...

Webbrowser
Prüfen, ob man bei einem Onlineportal angemeldet ist

Frage von joehuaba zum Thema Webbrowser ...

Visual Studio
gelöst Remotedienst prüfen mit Visual Basic (1)

Frage von flyingmichael zum Thema Visual Studio ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Infineon TPMs unsicher! Bitlocker ggf. angreifbar

(2)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Firewall

PfSense Repository für Version 2.3.x

(3)

Information von Dobby zum Thema Firewall ...

LAN, WAN, Wireless

WPA-2 hat erste Risse: KRACK

(8)

Information von the-buccaneer zum Thema LAN, WAN, Wireless ...

Hardware

GPD Pocket: Winziger Laptop für Wenig Tipper

(1)

Information von pelzfrucht zum Thema Hardware ...

Heiß diskutierte Inhalte
Microsoft Office
ICH BIN AM ENDE MEINES IT-WISSENS ANGELANGT!!!! (37)

Frage von 134537 zum Thema Microsoft Office ...

Windows Server
gelöst Gruppenrichtlinie greift nicht zu! (23)

Frage von Syosse zum Thema Windows Server ...

Hosting & Housing
Mailserver Software Empfehlungen (21)

Frage von sunics zum Thema Hosting & Housing ...