Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

Batch Timeout in msgbox anzeigen?

Frage Entwicklung Batch & Shell

Mitglied: OKIDOKI

OKIDOKI (Level 1) - Jetzt verbinden

22.02.2012, aktualisiert 18.10.2012, 7114 Aufrufe, 21 Kommentare

Guten Abend,
vielleicht ist dies wieder einmal eine Frage, die viele andere interessiert ...

Ich möchte gerne einen timeout im batch abbilden und das Ganze in einer msgbox anzeigen lassen.
Dazu habe ich eine Angabe in einer msgbox und anschließend eine ping-Wartepause. Allerdings bringe ich es nicht zustande, die Wartezeit als Countdown in der msgbox abzubilden:

01.
ECHO msgbox"Ihre Wartezeit beträgt 20 Sekunden.",64,"Timer" > %temp%\msg.vbs 
02.
%temp%\msg.vbs 
03.
del %temp%\msg.vbs 
04.
 
05.
ping /n 20 localhost >nul 
06.
 
07.
GOTO EOF
Kann hier jemand helfen?
OKIDOKI
Mitglied: bastla
22.02.2012, aktualisiert 18.10.2012
Hallo OKIDOKI!

Kannst Du vielleicht etwas weiter ausholen und erklären, was Du eigentlich erreichen willst? Ev könntest Du (wie in diesem Beitrag gezeigt) in einer Schleife mit jeweils einer Sekunde Dauer ein Popup anzeigen lassen (wobei dieses allerdings durch Klick auf eine Schaltfläche oder Schließen des Fensters vorzeitig beendet werden kann) - schön ist das dann aber sicher nicht ...

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
22.02.2012 um 23:49 Uhr
Hallo bastla,

damit man sieht, wie lange auf etwas gewartet werden soll, soll die Wartezeit als Countdown in der msgbox angezeigt werden. Dass man den Vorgang mit klicken abbrechen kann ist klar, die Wartezeit bleibt (im Fall von ping) aber totzdem erhalten!
Siehe ähnlich diesem Beitrag:
http://board.gulli.com/thread/1342784-batch-animationen-und-zaehler/
Allerdings wird hier die Animation im Dosfenster angezeigt.

Biber hatte auch schon einen schönen Ansatz:
http://www.system-administrator.eu/index.php?content=40760
Als Ergänzung wäre es nun toll, den Countdown in der msgbox anzeigen zu können ...

Vielleicht hilft hier eine popup box, die aber auch nicht den Countdown an sich anzeigt, aber zumindest so lange wartet: (Quelle: http://ss64.com/vb/popup.html)

01.
Set WshShell = Wscript.CreateObject("Wscript.Shell") 
02.
WshShell.Popup "Click me Quick!",, "My Popup Dialogue box"
Wie es aussehen könnte http://vbnet.mvps.org/index.html?code/hooks/messageboxhooktimer.htm


Gruß OKIDOKI
Bitte warten ..
Mitglied: bastla
22.02.2012 um 23:58 Uhr
Hallo OKIDOKI!

Mit "Popup" wärst Du dann bei meinem Vorschlag von oben angekommen ...

Auf Deine beschriebene Situation angepasst sähe das etwa so aus:
01.
set /a Sek=20 
02.
set PopUp=%temp%\msg.vbs 
03.
>%PopUp% ECHO WScript.CreateObject("WScript.Shell").PopUp "Ihre Wartezeit beträgt %Sek% Sekunden.",%Sek%,"Timer",64 
04.
start %PopUp% 
05.
 
06.
set /a Sek+=1 
07.
ping /n %Sek% localhost >nul 
08.
del %PopUp%
Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
23.02.2012 um 07:07 Uhr
Aloha,

warum wird nicht einfach die timeout.exe genutzt (bei Windows 7 standard - sonst gibt es auch eine gleichfunktionierende im Internet (einzeln als zip), vom Resource Kit für NT4, nutze ich für unsere fehlerhafte OpenVPN-Verbindungen)
>timeout /? 
 
TIMEOUT - This utility is similar to the DOS PAUSE command.  However, it 
          accepts a timeout parameter to specify a length of wait (in seconds) 
          at which time it will continue without a key press. 
 
          Written by Eric Brown, Business System Division. 
          Copyright (C) Microsoft Corporation, 1992-1995. 
 
Usage -   TIMEOUT <###> 
          where <###> is a decimal number of seconds between -1 and 100000. 
          The value -1 means to wait indefinitely for a key hit. 
 
 
23.02.2012  7:05:52,90 C:\Dokumente und Einstellungen\User 
>timeout 20 
 
Waiting 16 seconds, press a key to continue...
da zählt natürlich von 20 runter [Auszug aus der angepassten timeout.exe, die auch für Windows XP / x86 funktioniert]

Also nur für den Fall, dass man eine Anzeige benötigt und daher auf VBS MsgBox rumkaut, weil man glaubt, im Batch gibt es keine.

greetz André
Bitte warten ..
Mitglied: bastla
23.02.2012 um 08:55 Uhr
@skye
Wenn ich das richtig verstanden habe, geht es aber darum, die Verzögerung (realisiert durch "ping") in voller Länge sicherzustellen - die Anzeige soll nur informativen Charakter haben (deswegen auch per "start" parallel ausgeführt) - im gleichen Fenster wird das aber auch mit "/b" nix werden ...

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
23.02.2012 um 09:05 Uhr
Aloha bastla,

verstehe ... also das übliche bei OKIDOKI, man darf wieder mitinterpretieren, weil er es nicht ordentlich ausdrückt. ...

start cmd /c timeout 20 & ping /n 20 localhost >nul
dasselbe in grün, wobei 1 Sekunde Differenz sein wird (witzigerweise ist der Ping bei mir eher fertig, timeout also auf 19 oder ping auf 21 setzen).

greetz André
Bitte warten ..
Mitglied: OKIDOKI
23.02.2012 um 12:04 Uhr
Aloha,

bastla hat recht mit seiner Version, womit ich am Anfang wäre!
André kann ich auch nicht widersprechen, d´rum hier noch einmal deutlich

Ich suche nach einer Möglichkeit, die verbleibende Zeit im Popup abzubilden: Sie warten noch 7, 6, 5, ... Sek. Bisher wurde man ja nur darauf hingewiesen, wie lange man warten muss, oder dass man schon so und so lange gewartet hat!

Ich hoffe diesmal deutlicher ...
OKIDOKI
Bitte warten ..
Mitglied: pieh-ejdsch
23.02.2012 um 17:09 Uhr
moin OKIDOKI,

Wenn Du eh mit (temporären) VBS arbeitest, kannst Du doch auch wait mit vbs nutzen. ist vllt etwas genauer als der ping.

sonst würde ich auch nur ein kleineres cmd popup verwenden
in Windows 7 aber mit waitfor anstatt timeout. Waitfor zieht die Zeit bis zum Ende durch.

01.
start "Timer" cmd /c "color f0&mode con cols=35 lines=4& for /l %%i in (20 -1 1) do cls&title Wartezeit ist noch %%i sek.&echo Sie warten noch %%i sekunde^(n^).&waitfor x /t 1"
Gruß Phil
Bitte warten ..
Mitglied: bastla
23.02.2012 um 18:25 Uhr
Hallo OKIDOKI!
Ich suche nach einer Möglichkeit, die verbleibende Zeit im Popup abzubilden
Du wirst sie leider nicht finden ...

... und etwas in der Art
01.
set /a Sek=20 
02.
set PopUp=%temp%\msg.vbs 
03.
>%PopUp% ECHO T=(Timer+1) Mod 86400:WScript.CreateObject("WScript.Shell").PopUp "Ihre Wartezeit beträgt " ^& WScript.Arguments(0) ^& " Sekunden.",1,"Timer",0:Do While Timer^<T:Loop 
04.
for /l %%i in (%Sek% -1 1) do %PopUp% %%i
wirst Du sicherlich auch niemandem antun wollen ...

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
24.02.2012 um 00:23 Uhr
Hallo OKIDOKI,

wie bereits in deinem letzten Thread angemerkt, ist Batch nun mal Console und nicht Klicki-Bunti.
Hier noch mal ein Beispiel, an dem du unschwer erkennen kannst, dass du den ganzen Kram auch gleich in einer anderen Sprache umsetzen könntest ...

01.
@echo off &setlocal 
02.
:: Variable Sek wird in der HTA wieder expandiert 
03.
set /a Sek = 5 
04.
 
05.
set "msg=%temp%\tmp.hta" 
06.
:: alle Zeilen, die mit min. 6 Leerzeichen anfangen in die HTA umleiten 
07.
>"%msg%" (type "%~f0"|findstr /bc:"      ") 
08.
mshta "%msg%" 
09.
del "%msg%" 
10.
 
11.
echo Jetzt gehts weiter. 
12.
pause 
13.
goto :eof 
14.
:: und schon Schluss mit Batch 
15.
 
16.
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"> 
17.
      <html xmlns="http://www.w3.org/1999/xhtml"> 
18.
        <head> 
19.
          <title>Countdown</title> 
20.
 
21.
          <hta:application 
22.
           id="oHTA" 
23.
           applicationname="myApp" 
24.
           border="thin" 
25.
           borderstyle="normal" 
26.
           caption="yes" 
27.
           contextmenu="yes" 
28.
           icon="" 
29.
           innerborder="no" 
30.
           maximizebutton="no" 
31.
           minimizebutton="no" 
32.
           navigable="yes" 
33.
           scroll="no" 
34.
           scrollflat="no" 
35.
           selection="no" 
36.
           showintaskbar="no" 
37.
           singleinstance="yes" 
38.
           sysmenu="yes" 
39.
           version="1.0" 
40.
           windowstate="normal" 
41.
          /> 
42.
 
43.
          <style type="text/css"> 
44.
            body      {background-color:#EEF0FF; color:#FF0000; font-family:Helvetica; font-size:12pt; margin:10px 20px 10px 20px;} 
45.
          </style> 
46.
 
47.
          <script type="text/jscript"> 
48.
            /* <![CDATA[ */ 
49.
            window.resizeTo(300, 100); 
50.
            window.moveTo(screen.width/2-150, screen.height/2-50); 
51.
            var oWSH=new ActiveXObject("WScript.Shell"); 
52.
            var i=parseInt(oWSH.ExpandEnvironmentStrings("%Sek%")); 
53.
 
54.
            function countdown() { 
55.
              if (0 < i) { 
56.
                document.getElementById('display').innerHTML='Ihre Wartezeit beträgt '+i.toString()+' Sekunden.' 
57.
                i--; 
58.
                setTimeout('countdown()', 1000); 
59.
              } else { 
60.
                window.close(); 
61.
62.
63.
            /* ]]> */ 
64.
          </script> 
65.
 
66.
        </head> 
67.
        <body onload="countdown()"> 
68.
          <div id="display" name="display" /> 
69.
        </body> 
70.
      </html>
... denk mal drüber nach ...

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
24.02.2012 um 08:31 Uhr
Guten Morgen,

ja, da kann ich bastla nur recht geben
Auch Rubbermann stimme ich natürlich zu, hier sind die Grenzen der Console erreicht! Mein Problem, da bin ich ganz ehrlich, sind kleine Wünsche, die dauernd hinzugekommen sind. Ich denke schon länger darüber nach, noch einmal ganz neu aufzusetzen!
Hast du vielleicht einen Tipp, wie ich einsteigen sollte? Was hälst du von purebasic? http://www.purebasic.com

Ansonsten trotzdem noch einmal danke für eure Mühe!
OKIDOKI
Bitte warten ..
Mitglied: Skyemugen
24.02.2012 um 08:50 Uhr
Zitat von pieh-ejdsch:
in Windows 7 aber mit waitfor anstatt timeout. Waitfor zieht die Zeit bis zum Ende durch.
Aloha Phil,

danke für den Hinweis waitfor gibt es ja ebenso im o.g. Resource Kit für Windows 2000
>waitfor /? 
waitfor: 
 
waitfor [-t <timeout>] [-s] <signal name> 
Wait until the 'signal' is given across the net. 
Parameters: 
        -t timeout      Number of seconds to wait.  Default is forever. 
        -s              Send signal instead of waiting. 
 
Only one 'waitfor' can wait on a given signal on a given machine.
ergo auch für XP nutzbar etc. schöne Sache, sollte mir mal alle tools im Kit durchlesen, wer weiß, was noch so gutes dabei ist ^__^

greetz André
Bitte warten ..
Mitglied: rubberman
24.02.2012 um 14:56 Uhr
Hallo OKIDOKI.

Zitat von OKIDOKI:
Hast du vielleicht einen Tipp, wie ich einsteigen sollte? Was hälst du von purebasic?

Du solltest die Sprache nach folgenden Gesichtspunkten auswählen:
- Was will ich zukünftig damit Programmieren? Welche Sprache ist dafür geeignet?
- Welche Syntax fällt mir am leichtesten zu verstehen?
- Ist die Sprache populär (ein Indiz dafür dass sie auch gut sein könnte ) und wird sie noch weiterentwickelt.

Schau dir mal Java, C# und C++ an. Falls dir die Syntax widerstrebt und du nur für Windows entwickeln willst ggf. auch VB. Als Einsteigersprache evtl. Python.
Es ist schwierig dir einen Rat zugeben. Wenn du 10 Leute fragst, wirst du wahrscheinlich 11 unterschiedliche Antworten bekommen . Ich habe mich vor etwas über einem Jahr dazu entschieden mir C++ autodidaktisch anzueignen. Leider habe ich nur wenig Zeit dazu und somit ist mein Code meistens ein hässlicher Mix aus C, C++ und C++/Cli ...

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
24.02.2012 um 15:13 Uhr
Hallo rubberman,

das ist ein guter Tipp! Python habe ich auch schon einmal gehört, das würde meinen Befürfnissen, glaube ich, nahe kommen. Ich werde es mal ausprobieren! Gibt es dazu auch ein gutes Forum?

Grüße OKIDOKI
Bitte warten ..
Mitglied: rubberman
24.02.2012 um 19:23 Uhr
Hallo OKIDOKI,

ich habe selbst noch nichts mit Python gemacht, nur ab und zu einige Codes studiert. Für mich überzeugt aber die Plattformunabhängigkeit und die große Anwendungsbreite. Außerdem ist das Einrücken des Codes Teil der Syntax, was meiner Meinung nach nicht unerheblich ist, um einen guten Programmierstil zu schulen. Foren gibt es sicherlich einige, ich würde aber auch nur eine Suchmaschine benutzen - darum kein Vorschlag von mir.

So, nun sind wir aber eindeutig offtopic - egal, wenn's dir hilft

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
24.02.2012 um 19:52 Uhr
Hallo rubberman,
ja, danke, hilft mir wirklich und vielleicht auch anderen!

Zum guten Abschluss dieses Threads gehört auch ein Vorschlag, mit dem womöglich auch andere gut leben können. Wie gesagt ging es darum, einen Countdown in der msgbox abzubilden. Das dies nicht ohne Probleme möglich ist, haben rubberman, bastla, Skyemugen und pieh-ejdsch wieder einmal eindrucksvoll bewiesen. Eine zufriedenstellende Lösung ist nicht in Sicht.

Hier mein Vorschlag noch, den ich beim Surfen gefunden habe:
"Wbusy ist ein Busy-Anzeiger für zeitaufwändige Batch-Prozesse. Das Busy-Fenster zeigt einen Zähler order Laufbalken und eine Textinformation.
Um das Fenster zu schließen oder um es durch eine "fertig" Mitteilung zu ersetzen, wird das Programm noch einmal mit dem /stop Parameter gestartet.

Im /stop Modus wird die Textinformation mit einem OK-Button ausgegeben (optional: timeout).
Wird kein Text angegeben, verschwindet der Busy-Anzeiger einfach.
Der Titel muss in beiden Fällen der gleiche sein.

Mehrzeiliger Text möglich. Automatische Fensteranpassung." Quelle: http://www.horstmuc.de/w32diald.htm#wbusy
Klappt soweit ich probiert habe hervorragend!

Danke allen
OKIDOKI
Bitte warten ..
Mitglied: bastla
24.02.2012 um 20:22 Uhr
Hallo OKIDOKI!

Danke für Deinen Lösungsansatz/Link ...

... aber hinsichtlich rubbermans (mit Bordmitteln umsetzbarer) HTA-Variante kann ich die Aussage
Eine zufriedenstellende Lösung ist nicht in Sicht.
eigentlich nicht akzeptieren (obwohl natürlich "zufriedenstellend" vom Anspruchsniveau abhängt ) ...

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
24.02.2012 um 20:36 Uhr
Hallo bastla,
ja, das stimmt, so gesehen.

Aber bei rubbermans Vorschlag müsste noch ergänzt werden, dass durch Abbruch des Countdowns der Countdown trotzdem weiterzählt! So wäre es so, dass man auf Schließen klickt und die batch damit auch gleich zur nächsten Sprungmarke springt - ohne den Countdown abzuwarten.
Ansonsten sieht der Countdown echt hammermäßig aus - finde ich! (Wenn das mit dem zu verhindernden Abbruch irgendwie gehen würde, wäre es sogar besser als mit Wbusy, weil man dann weiß, wie lange man noch wirklich warten muss!

Gruß OKIDOKI
Bitte warten ..
Mitglied: bastla
24.02.2012 um 21:17 Uhr
Hallo OKIDOKI!
Wenn das mit dem zu verhindernden Abbruch irgendwie gehen würde
Auf die Schnelle könntest Du Zeile 38 auf:
sysmenu="no"
ändern - ist damit zwar noch nicht wasserdicht, aber sicher besser ...

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
24.02.2012 um 21:39 Uhr
Hallo bastla.

Zitat von bastla:
Auf die Schnelle könntest Du Zeile 38 auf:
sysmenu="no"
ändern
Genau das war der Grund, warum ich alle mir bekannten Attribute des hta:application - Tags mit aufgenommen habe

Zitat von bastla:
ist damit zwar noch nicht wasserdicht
Och, ich bin davon überzeugt, dass wbusy genauso wenig wasserdicht ist.

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
24.02.2012 um 21:46 Uhr
Ihr seid echt scharf

Unabhängigvon der Wirkung bei Wbusy, ist rubbermans countdown einfach besser und sieht viiiiel besser aus!!! War ja auch nur ein Vorschlag ...

OKIDOKI
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...