77575
Goto Top

Prüfen ob Variable nur aus Zahlen besteht

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

Content-Key: 206349

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

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

Member: rubberman
rubberman May 12, 2013 at 20:03:58 (UTC)
Goto Top
Hallo 01-01-01,

etwa so:
set "first=%1"  
set "second=%2"  
set "third=%3"  

if not defined first (echo kein Argument uebergeben) else (
  if not defined second (echo nur ein Argument uebergeben) else (
    if defined third echo zu viele Argumente uebergeben
  )
)

setlocal EnableDelayedExpansion
if defined first echo("!first!"|findstr /rxc:".[0-9][0-9]*." >nul || echo erstes Argument ist nicht numerisch  
endlocal

Grüße
rubberman
Member: bastla
bastla May 12, 2013 updated at 20:25:16 (UTC)
Goto Top
... oder als Alternative:
@echo off & setlocal
set "OK=%~1"  
for /f "delims=0123456789" %%i in ("%~1") do set "OK="  
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
Member: Endoro
Endoro May 12, 2013 updated at 20:55:19 (UTC)
Goto Top
Hallo 01-01-01,

hast du auch negative Zahlen? Das geht so:

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!
Mitglied: 77575
77575 May 13, 2013 at 19:08:40 (UTC)
Goto Top
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):

@echo off & setlocal 
set "PARAMETER1=%1"  
set "PARAMETER2=%2"  
set "PARAMETER1_OK=%~1"  

if (%1)==() if (%2)==() goto ALLE_FEHLEN

for /f "delims=0123456789" %%i in ("%~1") do set "PARAMETER1_OK="   
if not defined PARAMETER1_OK goto PARAMETER1_FEHLT

if (%2)==() goto PARAMETER2_FEHLT

goto PARAMETER_PASSEN

:PARAMETER1_FEHLT
	echo Syntax falsch				
pause
goto ENDE

:PARAMETER2_FEHLT
	echo parameter 2 fehlt
pause
goto ENDE

:ALLE_FEHLEN
	echo keine Paramter angegeben
pause
goto ENDE

:PARAMETER_PASSEN
	echo beide paramterpassen:
	echo Parameter 1 = %PARAMETER1%
	echo Paramater 2 = %PARAMETER2%
pause
goto ENDE

:ENDE

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
Member: rubberman
rubberman May 13, 2013 at 19:17:38 (UTC)
Goto Top
Hallo 01-01-01,

FINDSTR könnte auch hier weiterhelfen.
findstr /xc:"%2" "liste.txt" >nul || echo Nicht in der Liste.  

Grüße
rubberman
Member: bastla
bastla May 13, 2013 updated at 20:01:12 (UTC)
Goto Top
bzw etwas sicherer (und damit "/c:" Sinn macht face-wink):
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
Mitglied: 77575
77575 May 14, 2013 at 16:05:16 (UTC)
Goto Top
Hallo,

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

gruss 01
Member: bastla
bastla May 14, 2013 at 16:25:35 (UTC)
Goto Top
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
Member: rubberman
rubberman May 14, 2013 updated at 16:35:43 (UTC)
Goto Top
Hallo Zusammen.

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

Grüße
rubberman
Member: Endoro
Endoro May 14, 2013 at 20:02:53 (UTC)
Goto Top
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!