Top-Themen

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, 1867 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
Batch & Shell
Variable auf Inhalt prüfen
gelöst Frage von PinkFLuffyUnicornBatch & Shell1 Kommentar

Hi, ich sitze jetzt schon den halben tag daran eine if schleife zu erstellen die mir sagt ob Variable ...

Batch & Shell
Prüfen ob Variablen inhalt Buchstaben enthält
Frage von IForeverBatch & Shell7 Kommentare

Hallo administrator.de! Ich habe ein kleines Logikproblem, welches ich gerne lösen, bzw. erklärt haben möchte, sollte es so gar ...

Batch & Shell
Variable mit mehreren Werten durch eine Zahl teilen - Linux
gelöst Frage von lapvikaBatch & Shell2 Kommentare

Hallo zusammen, einer Variablen werden mehrere Werte (Zahlen) zugewiesen. Ich möchte nun all diese Werte (Zahlen) die der Variablen ...

Batch & Shell
Batch - Random Zahl in Variable und Textdatei abspeichern
gelöst Frage von citroendsvierBatch & Shell8 Kommentare

Ich sitze an einer batch, die u.a. folgende Schritte abarbeiten soll: 1.: Namen einer anderen Batch aus einer Textdatei ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 12 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 15 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...