henni1
Goto Top

In Batch Datei eine Prüfung einbauen, ob ein Wert eine Zahl ist

Hallo!

Ich habe mich in letzter Zeit mal ein bisschen mit DOS/Batch Programmierung beschäftigt, und habe folgendes Script erstellt:

@echo off
set /p abfrage=Wie viele Dateien moechten Sie erstellen?

FOR /L %%f IN (1,1,%abfrage%) DO copy nul H:\testordner\%%f.txt

echo Es wurden %abfrage% Dateien erstelltt!
echo Zum beenden bitte eine beliebige Taste Druecken.

pause


Dieses Script erzeugt in dem Ordner "H:\testordner\" eine bestimmte Anzahl an leeren .txt-Dateien mit fortlaufender Nummer.

Jetzt möchte ich eine Prüfung einbauen, wenn der Wert, der eingegeben wurde, keine Zahl ist.
Wenn der Wert, der bei der Abfrage eingegeben wurde, keine Zahl ist, soll eine Fehlermeldung angezeigt werden.

Das bekomme ich leider noch nicht so ganz hin, es wäre super, wenn ihr mir kurz helfen könntet.

MfG und vielen Dank im Vorraus!

Content-Key: 70743

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

Printed on: April 25, 2024 at 20:04 o'clock

Member: miniversum
miniversum Oct 11, 2007 at 18:37:34 (UTC)
Goto Top
so?:
@echo off
set /p abfrage=Wie viele Dateien moechten Sie erstellen?
set /a abfrage2=%abfrage%+0
if %abfrage% NEQ %abfrage2% (
echo "%abfrage%" ist keine Zahl!  
) else (
FOR /L %%f IN (1,1,%abfrage%) DO copy nul H:\testordner\%%f.txt

echo Es wurden %abfrage% Dateien erstelltt!
echo Zum beenden bitte eine beliebige Taste Druecken.
)
pause

miniversum
Member: henni1
henni1 Oct 11, 2007 at 18:45:50 (UTC)
Goto Top
Vielen Dank, genau so wollte ich es haben. face-smile
Member: Biber
Biber Oct 11, 2007 at 19:13:08 (UTC)
Goto Top
Moin henni1 und miniversum,

Kleine Fussnote:
Wenn der Eingabewert wirklich keine Zahl sein sollte, kommt eine meterlange Fehlermeldung auf den Bildschirm bzw. auf den Ausgabekanal 2 (STDERR).

Eine Fehlermeldung schreibt der Batch ja individuell - also kann man/frau die M$-Vorlage entsorgen.

Dazu einfach noch eine Umleitung von STDERR anhängen:
....
set /a abfrage2=%abfrage%+0 2>nul
...

Grüße
Biber
Member: miniversum
miniversum Oct 11, 2007 at 19:29:45 (UTC)
Goto Top
Hä? bei mienem windows xp pro kommt da weder ne fehlermeldung noch liefert es irgenteinen errorlevel

miniversum
Member: Biber
Biber Oct 11, 2007 at 19:57:41 (UTC)
Goto Top
Moin miniversum,

kommt wie immer im Leben auf die Reihenfolge bzw. die Vollständigkeit des Testens an...*gg
(=21:51:41  D:\=)
>set /a asdasdas23+0
0
(=21:51:52  D:\=)
>set /a 23asasas+0
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.

(=21:51:55  D:\=)
>set /a asdasdas23+0 2>nul
0
(=21:53:09  D:\=)
>set /a 23asasas+0 2>nul

(=21:53:18  D:\=)
==> bei Fehlerfall 2 (Eingabe war etwas, dass vom großen Guru in Redmond als Zahl ANGESEHEN wurde,
weil "an erster Stelle steht doch eine Ziffer *axelzuck*"....
Dort kommt NIX (auch keine "0") auf STDOUT.
Aber immer ein Zweizeiler auf STDERR.

Ist halt buggy zusammengekehrt, dieses Betriebssystem... na, ja -Geiz ist geil....

Grüße
Biber
Member: miniversum
miniversum Oct 11, 2007 at 20:26:22 (UTC)
Goto Top
okok ich gebs ja zu ich habs nur mit einem Buchstaben getestet...
Eigentlich hät ich ja damit gerechnet das ein errorlevel komtm bei sowas, also so:
set test=abc
set test2=%test%+0
echo %errorlevel% & REM hier här ich dann mit ner 1 gerechnet

miniversum
Member: Biber
Biber Oct 11, 2007 at 20:47:33 (UTC)
Goto Top
Moin miniversum,

>okok ich gebs ja zu ich habs nur mit einem Buchstaben getestet...
So um die Ecke zu denken wie M$ programmiert erfordert auch eine langjährige Übung...

Andererseits, da die offensichtlich nie etwas ernsthaft testen, macht es immer einen Heidenspass, deren Vorführmodelle auf Messen mal auf den Poller laufen zu lassen.

Grüße
Biber
Member: miniversum
miniversum Oct 11, 2007 at 20:56:01 (UTC)
Goto Top
naja da sind mir dan compilierpare programme lieber. da kann man zur not den compiler wechseln :D