7.9k Aufrufe
Gefragt in WindowsXP von
wie kann ich per batch etwas eingeben lassen und prüfen ob es eine zahl ist und die dann an einer anderen stelle wieder einfügen?

also z.b.: wie lange soll gewartet werden?
eingabe:5
es wird 5sekunden lang gewartet...
und wen etwas anderes drinsteht(buchstaben etc.) eine fehlermeldung

6 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Indem du eine arithmetische Operation auf die Eingabe durchführst ohne das Ergebnis zu verändern - dabei gelten Nichtzahlen als 0 und man kann hinterher vergleichen, ob das Ergebnis mit der Eingabe übereinstimmt.
[code]@echo off
setlocal
:nochmal
set /p eingabe=Bitte Zahl eingeben:
set /a zahl=%eingabe% + 0
echo.
if %zahl% neq %eingabe% (
  echo Fehler: keine gueltige Zahl!
  goto nochmal
)
echo Es wird %zahl% Sekunden gewartet...
endlocal[/code]
0 Punkte
Beantwortet von
ich habe jetzt das:

:nochmal
set /P zeit=Wie lange soll gewartet werden bevor das nächste Programm gestartet wird?
set /a zahl=%zeit% + 0
echo.

if %zahl% neq %zeit% (
echo Fehler: keine gueltige Zahl!
goto nochmal
)
echo Es wird %zahl% Sekunden gewartet...


echo %a% >> %datei%
echo %b% >> %datei%
echo %c% >> %datei%


und in a b und c (die am anfang der datei definiert sind) steht:

set a=REM start programm
set b=Start "" "pfad\programm"
set c=ping -n %zeit% 127.0.0.1>nul


und wen ich jetzt angenommen 5sekunden nehme kommt diese ausgabe:
REM start programm
Start "" "pfad\programm"
ping -n 127.0.0.1


sprich die zeit wird nicht eingetragen...
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
und in a b und c (die am anfang der datei definiert sind) steht
Das ist der Fehler - zu dem Zeitpunkt ist %zeit% undefiniert und dessen Inhalt damit leer. Und warum erzeugst du überhaupt weitere Variablen und gibst es nicht direkt in die Datei aus?
@echo off
setlocal

:nochmal
set /P zeit=Wie lange soll gewartet werden bevor das nächste Programm gestartet wird?
set /a zahl=%zeit% + 0
echo.

if %zahl% neq %zeit% (
echo Fehler: keine gueltige Zahl!
goto nochmal
)
echo Es wird %zahl% Sekunden gewartet...

set datei=test.out
echo REM start programm >> %datei%
echo Start "" "pfad\programm" >> %datei%
echo ping -n %zeit% 127.0.0.1 ^> nul >> %datei%

endlocal
0 Punkte
Beantwortet von
ich habs so gemacht weil ich ca. 20programme habe die diese abfrage durchmachen und da a,b,c jeweils zusammengehören war es übersichtlicher...und die batch datei ist bereits fast 800 zeilen lang und wird wohl noch auf über 1000 wachsen...
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Dann quetsch deine a/b/c-Zeilen halt in jedem Skript untendran statt sie oben hinzuschreiben. Oder du kapselst sie in einer (Pseudo)Funktion, die dann später aufgerufen wird... Fakt ist: du kannst die Werte erst zuweisen, wenn all deren Bestandteile auch bekannt sind.
0 Punkte
Beantwortet von
ok danke merk ich mir :)
ist meine erste größere batch die 20zeilen überschreitet^^
...