nocheinnoobmehr
Goto Top

Wartezeit bei "set p" begrenzen?

Moinsen,
ich hab da irgendwie ein Brett vor dem Kopp:
In einem Script habe ich eine Eingabe "set /p..." und möchte, dass nach bsp. 10min die Eingabe verworfen wird und das script ohne die Eingabe weiterläuft. (Zeile 25)

HIntergrund:
Jemand loggt sich mit seinem Namen im Script ein und es wird auf eine Eingabe gewartet. Erfolgt die innerhalb von 10min. nicht, soll das Script wieder von vorne beginnen und auf einen Login warten.

Hinter dem Hintergrund:
Bin jetzt nicht der begabte Scripter; bitte habt Nachsicht.^^

:anfang
title=Etikettendruck
@echo off
setlocal enabledelayedexpansion
cls & color F8 & echo. & set user=
::::::::::::::::::::::: user-login :::::::::::::::::::::
echo    bitte einloggen: & echo. & set /p user=%user%
for /f "delims=" %%a in (%~dp0\user.txt) do (  
	if "!user!"=="%%a" (  
	set "user-eingeloggt=!user!"  
	goto ean
	)
)
echo. & echo Benutzer "%user%" nicht bekannt & echo.  
ping -n 3 localhost> nul
set user=
goto anfang
:ean
cls & color F8 & echo.
set ean= & set len= & set anzahl= & set charge=
cls  & echo. & echo        Hallo "%user-eingeloggt%". Schoen, dass du da bist. ^:^)  
               echo        (ausloggen mit deinem Barcode) 
:::::::::::::::::: EAN scannen und auf 13 Stellen pruefen oder logout::::::::::::::::
echo. & echo    bitte EAN scannen:
set /p ean=%ean%
:Loop
if "!ean!"=="!user-eingeloggt!" (  
	set "!user-eingeloggt!="  
	set "!user!="  
	cls
	goto anfang
)
if "!ean:~%len%!" neq "" set /a len+=1 & goto Loop  
if not %len%==13 (For /L %%i in (1,1,2) do echo ) & color 4f & ping -n 3 localhost>nul & goto ean
::::::::::::::::::::: Charge eingeben und Wert pruefen ::::::::::::::::::::::::::::::
:loopcharge
echo. & set charge=  & color F8
echo    Charge:
set /p charge=%charge%
for /L %%x in (1,1,20) do ( if "!charge:~%%x!"=="" set len=%%x & goto Result )  
:Result 
if not %len%==8 (For /L %%i in (1,1,2) do echo ) & color 4f & ping -n 3 localhost>nul & goto loopcharge
::::::::::::::::::::: Anzahl eingeben und max. Wert pruefen ::::::::::::::::::::::::::::::
:loopanzahl
echo. & echo    Anzahl der Etiketten:
set anzahl= & set /p anzahl=%anzahl%
if !anzahl! GTR 100 goto loopanzahl
::::::::::::::::::: Daten in Datei schreiben :::::::::::::::::::::
echo %ean%;%charge%;%anzahl%;%date:~0%;%time:~0,8%;!user-eingeloggt!;>>"%~dp0\daten\%date:~0%-charge.csv"  
echo %ean%;%charge%;%anzahl%;%date:~0%;%time:~0,8%;!user-eingeloggt!;>"%~dp0\tmp.txt"  
@echo 
color 2a
ping -n 2 localhost> nul
start "" "%~dp0\autoit.exe"  
goto ean
exit
	

Content-ID: 511145

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

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

141575
141575 01.11.2019 aktualisiert um 10:58:51 Uhr
Goto Top
ich hab da irgendwie ein Brett vor dem Kopp:
Scheint so...
choice
nocheinnoobmehr
nocheinnoobmehr 01.11.2019 um 12:00:35 Uhr
Goto Top
Aber echt, ey. "Choise" kannte meine Synapse noch nicht.

/? bringt mich aber auch nicht viel weiter, da die Eingabe nicht ein einzelnes Zeichen ist, sondern eine 13-stellige Zahl ausm Barcodescanner.
Hast du da ne Idee zu?
Kraemer
Kraemer 01.11.2019 aktualisiert um 12:38:16 Uhr
Goto Top
Zitat von @nocheinnoobmehr:

Aber echt, ey. "Choise" kannte meine Synapse noch nicht.
heißt ja auch choice

Dein "Problem" bekommst du meines Wissens nach nur mit externer Software in den Griff. Ich verstehe allerdings nicht, warum du dich da mit Batch quälst. Die PowerShell ist schon erfunden.

Gruß
nocheinnoobmehr
nocheinnoobmehr 01.11.2019 um 13:03:59 Uhr
Goto Top
Mit PS kenn ich mich überhaupt nicht aus, da für die wenigen, einfachen Anwendungen bisher DOS ausgereicht hat.
Scheint, als wenn ich da an die Grenzen komme....schade
141575
141575 01.11.2019 aktualisiert um 13:08:10 Uhr
Goto Top
Zitat von @nocheinnoobmehr:
/? bringt mich aber auch nicht viel weiter, da die Eingabe nicht ein einzelnes Zeichen ist, sondern eine 13-stellige Zahl ausm Barcodescanner.
Doch bringt es dich. Der Benutzer muss erst im choice Teil manuell bestätigen daß er eine Eingabe tätigen soll (j/n) erst dann fragst du nach der Nummer mit der /p , bestätigt er die Abfrage nicht mit j geht das Skript nach dem festgelegten Timeout automatisch dorthin wo du es haben willst, fertig.
nocheinnoobmehr
nocheinnoobmehr 01.11.2019 um 13:42:25 Uhr
Goto Top
Genau das geht leider nicht. Wie man unschwer erkennen kann, ist es ein Tool in der Produktion. Es wird EAN, Charge und Anzahl hintereinander gescannt und aus dem Drucker rattern per autoit-script die Etiketten.
Die Mädels reißen mir den Kopf ab, wenn die jedesmal zur Tastatur greifen müssten.
141575
141575 01.11.2019 aktualisiert um 14:10:02 Uhr
Goto Top
Dann ist Batch die falsche Wahl, bau dir den GUI mit PS oder Autoit wenn das sowieso schon im Einsatz ist!

Wie man unschwer erkennen kann, ist es ein Tool in der Produktion
Kopfschüttel.
nocheinnoobmehr
nocheinnoobmehr 01.11.2019 um 15:01:42 Uhr
Goto Top
Zitat von @141575:
...
Wie man unschwer erkennen kann, ist es ein Tool in der Produktion
Kopfschüttel.
Nun ja, andere Batches laufen seit Jahren problemlos. Keep it simple. :P

Aber trotzdem Danke für die Aufmerksamkeit und die Tipps. Ich dachte, dass ist auch mit DOS zu machen...
erikro
erikro 01.11.2019 um 20:15:00 Uhr
Goto Top
Moin,

Zitat von @nocheinnoobmehr:
Nun ja, andere Batches laufen seit Jahren problemlos. Keep it simple. :P

Wohl eher seit Jahrzehnten. Schließlich gibt es die PS seit 2006. face-wink Aber genau wegen KISS solltest Du sowas mit der PS realisieren und nicht mit der alten Batchsprache. Ich könnte darauf wetten, dass man diesen Spaghetticode mit goto und den ganzen Krücken in der PS auf vielleicht zehn Zeilen reduzieren kann. Das ist dann besser lesbar, weniger fehleranfällig, schneller und leichter zu warten.

my 2 cents

Erik
nocheinnoobmehr
nocheinnoobmehr 06.11.2019 um 14:53:51 Uhr
Goto Top
Bevor ich mit PS anfange, hab ich doch ein wenig experimentiert und es geht doch. :P

Auszug aus der test_eti.bat:
--- snip ----
echo. & echo    bitte EAN scannen:
ping -n 1 localhost>nul
start /MIN "" "timer.bat"  
set /p ean=%ean%
taskkill /FI "WINDOWTITLE eq timer">nul  
--- snip --- 


Die timer.bat:
@echo off & set zeit=0
:anfang
title=timer
ping -n 2 localhost>nul
if not %zeit%==3 set /a zeit+=1 & goto anfang
taskkill /FI "WINDOWTITLE eq Etikettendruck"  
ping -n 1 localhost>nul
start "" "test_eti.bat"  
exit

Script wartet auf die Eingabe "EAN". Kommt nach Zeit %zeit% keine Eingabe, startet test_eti.bat neu und der User ist ausgeloggt.
Kommt eine Eingabe "EAN", wir der timer gekillt und startet wieder neu. Nicht schön, aber häßlich und tut. ^^

Und ja, ich hab mir PS auf die Agenda geschrieben.
Nochmals vielen Dank für die Aufmerksamkeit