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

Mittels Batch Zeit bis ausgeben

Frage Entwicklung Batch & Shell

Mitglied: Power-Poler

Power-Poler (Level 1) - Jetzt verbinden

16.01.2011, aktualisiert 16:37 Uhr, 6995 Aufrufe, 19 Kommentare

Guten Tag
Bin neu hier, und habe mir mittels Batch einen Script geschrieben, der eine Zeit bis zu einem Datum runter zählt.
Naja, selbst geschrieben nur Teilweise, der groß teil stammt hier aus dem Forum, den ich zusammen kopiert habe (ich hoffe das ist erlaubt)

Wollte jetzt mal fragen, ob sich mal jemand den Script anschauen könnte, und mir eventuelle Tipps gegen kann, was sich verbessern liese.
Zurzeit flackert es ziemlich und sieht daher nicht gut aus.
Auch habe ich die befürchte, das ich mir damit das System zerschießen kann, wenn der Script länger wie einige Stunden läuft. (endlos schleife)
Der Großteil ist von hier:
http://www.administrator.de/index.php?content=153209

Dort habe ich dan sozusagen meinen teil noch mit angehängt.
So sieht es bisher aus:
01.
@echo off 
02.
:Test 
03.
set jahr=%date:~-4% 
04.
set monat=%date:~-7,2% 
05.
set tag=%date:~-10,2% 
06.
set test2=%time:~0,2%:%time:~3,2%:%time:~6,2% 
07.
set Test=%tag%.%monat%.%jahr%-%test2% 
08.
::echo %Test% 
09.
set "Von=%Test%"  
10.
set "Bis=18.04.2011-13:49:02"  
11.
 
12.
set G=%temp%\GetTimeDiff.vbs  
13.
 
14.
>%G% echo D=CDate(Replace(WScript.Arguments(1),"-"," "))-CDate(Replace(WScript.Arguments(0),"-"," ")):WScript.Echo Int(D)^&" "^&Hour(D)^&" "^&Minute(D)^&" "^&Second(D)  
15.
 
16.
for /f "tokens=1-4" %%a in ('cscript //nologo %G% "%Von%" "%Bis%"') do echo %%a Tage %%b Stunden %%c Minuten %%d Sekunden 
17.
sleep.exe 1 
18.
cls 
19.
goto Test
Die zweite Frage wäre, rechnet er richtig? 91 Tage scheint mir etwas lang zu sein.
Auch zählt er manchmal 2s runter, was auch nicht sein soll.
Schonmal Danke für eine Antwort
Mit freundlichen Grüßen
Power-Poler
Achso
BS: Windows 7 Home Premium 64bit (Falls die Befehle von BS zu BS abweichen können)
Mitglied: 76109
16.01.2011 um 17:32 Uhr
Hallo Power-Poler!

Also, mit dem heutigem Tag gerechnet sind es 92 Tage und wenn Du das Script in Codezeile 17 (1 Sekunde Pause) jedesmal für eine Sekunde anhälts, dann ist es kein Wunder, dass es ab und an 1 Sekunde überspringt

Und anstatt runterzuzählen meinst Du sicherlich hochzählen (von Heute - bis April)

Könnte man in etwa so zusammenfassen:
01.
@echo off & setlocal 
02.
set G=%temp%\GetTimeDiff.vbs  
03.
set "Bis=18.04.2011 13:49:02"  
04.
 
05.
>%G% echo WScript.Echo Join(Array(DateDiff("d", Now, CDate(WScript.Arguments(0))), Hour(Time), Minute(Time), Second(Time))) 
06.
 
07.
:Test 
08.
for /f "tokens=1-4" %%a in ('cscript //nologo %G% "%Bis%"') do echo %%a Tage %%b Stunden %%c Minuten %%d Sekunden 
09.
 
10.
Rem sleep.exe 1  
11.
Rem cls  
12.
Rem goto Test
Gruß Dieter

[edit] Auf Bibers Anregung hin entsprechend geändert [/edit]

@Biber
Hab ich wohl etwas geschlafen
Bitte warten ..
Mitglied: Biber
16.01.2011 um 17:38 Uhr
Moin Power-Puler,

willkommen im Forum.
Ergänzend zu didi1954:

Es ist nicht nötig, dass temporäre VBS-Snippet innerhalb der Looperei jede Sekunde neu zu schreiben.
Das kann einmalig außerhalb (= also vor) der Sprungmarke "Test"" passieren.

Grüße
Biber
Bitte warten ..
Mitglied: Power-Poler
16.01.2011 um 18:11 Uhr
Erstmal Danke für eure antworten.
Der Script von didi funktioniert leider nicht.
Zum einen Schlisst sich das Fenster sofort wider.
Zum anderen, habe ich auch oben vergessen da zuzuschreiben, wenn ich ein pause ans ende hänge Aktualisieren es sich nicht mehr.
Es bleibt auf der Zeit stehen.
Was ich jetzt nicht ganz nachvollziehen kann, warum bei dem Script von didi 92 Tage raus kommen, und bei "meinem" 91.
Also kann sein das ich etwas auf dem Schlauch stehe:
"Und anstatt runterzuzählen meinst Du sicherlich hochzählen (von Heute - bis April)"
Aber ich meine, es soll mir die Zeit auf die Sekunde angeben, wie lange es noch bis zu oben genannten Datum Dauert.
also "jetzt" 92 Tage 12 Stunden 33 Minuten 35 Sekunden
und in 1 Stunde 2 min 3 sek
92 Tage 11 Stunden 31 Min 32 Sekunden.
Und jede Sekunde soll es sich Aktualisieren.
Habe jetzt mal die rem's entfernt. Jetzt startet der Script auch.
Nur er zählt hoch, also vorne steht 92 Tage XX Stunden XX Min und die Sekunden zählen hoch.
Welche Zeit ist das den bitte?
Bitte warten ..
Mitglied: rubberman
16.01.2011 um 18:34 Uhr
Hallo Power-Poler, hallo Didi und Biber.

Um das Flackern zu verhindern kannst du mit dem CR Zeichen arbeiten (was unter Win7 nicht mehr so einfach ist, da CR und White Spaces in SET /P als erste Zeichen eliminiert werden).
Alle anderen Vorschläge mal mit eingebunden könnte das so aussehen:
01.
@echo off &setlocal enabledelayedexpansion 
02.
 
03.
set "Bis=18.04.2011 13:49:02" 
04.
 
05.
:: CR erzeugen 
06.
for /f %%a in ('copy /z "%~f0" nul') do set "cr=%%a" 
07.
 
08.
:: VBScript erzeugen 
09.
set G=%temp%\GetTimeDiff.vbs  
10.
>%G% echo D=CDate(WScript.Arguments(0))-Now:WScript.Echo Int(D)^&" "^&Hour(D)^&" "^&Minute(D)^&" "^&Second(D) 
11.
 
12.
:Test 
13.
:: VBScript aufrufen 
14.
for /f "tokens=1-4" %%a in ('cscript //nologo "%G%" "%Bis%"') do set "output=%%a Tage %%b Stunden %%c Minuten %%d Sekunden" 
15.
:: alte Ausgabe überschreiben 
16.
<nul set /p ".=.!cr!                                                  !cr!" 
17.
:: neue Ausgabe schreiben 
18.
<nul set /p ".=%output%" 
19.
goto Test
Grüße
rubberman

<EDIT: Zeile 10 angepasst. />
Bitte warten ..
Mitglied: Power-Poler
16.01.2011 um 18:49 Uhr
Danke dafür
Jetzt flackert es schon mal weniger.
Aber er zählt immer noch hoch.
Er soll runter zählen. Also auf dieses Datum hin.
Ein Countdown

Ähh, ok, jetzt gehst.
Bin wohl beim Kopieren irgendwo in der Zeile verrutscht. Aber jetzt tut er genau das was ich wollte.
Danke Leute für eure Hilfe.

100% lässt sich das Flackern wohl nicht beheben, oder?
Bitte warten ..
Mitglied: rubberman
16.01.2011 um 19:00 Uhr
ARRGH! Sorry, habe Didi's Script ungetestet übernommen.
Hab's jetzt oben im Script angepasst.

Grüße
rubberman
Bitte warten ..
Mitglied: Power-Poler
16.01.2011 um 19:09 Uhr
OK, Danke funktioniert
was komisch ist, der Text im code wurde aktualisiert, das du es editiert hast wurde aber noch nicht angezeigt.
Bitte warten ..
Mitglied: rubberman
16.01.2011 um 19:11 Uhr
Das wird auch nicht automatisch angezeigt (soll heißen, ich habe es nachträglich dazu geschrieben).

Grüße
rubberman
Bitte warten ..
Mitglied: 76109
16.01.2011 um 19:24 Uhr
Hallo Power-Poler!

Sorry, da stand ich wohl irgendwie auf der Leitung, aber rubbermann hat's ja gerichtet

Gruß Dieter
Bitte warten ..
Mitglied: C.R.S.
16.01.2011 um 19:39 Uhr
Hallo,

es wird eine Stunde zu viel angezeigt, da die Sommerzeitumstellung nicht berücksichtigt ist.

Grüße
Richard
Bitte warten ..
Mitglied: Power-Poler
16.01.2011 um 20:05 Uhr
Auf die Stunde genau kommt es nicht an.
Aber danke für den Hinweis.
Wegen dem Flackern noch mal.
Habe jetzt noch einen Text hinten dran eingefügt.
for /f "tokens=1-4" %%a in ('cscript //nologo "%G%" "%Bis%"') do set "output=%%a Tage %%b Stunden %%c Minuten %%d Sekunden xxx xxx yyyy yyydfsfsdfsdfsdfy"
es flackert aber meistens nur bis hinter xxx ab y ist es nicht so häufig. Gibs dafür eine Erklärung, bzw läst es sich ausnutzen um das Flackern abzustellen?
Läst sich über einen Umweg, also zum Beispiel das ganze in einer Variablen Zwischenspeichern, das Flackern fillecht abstelle?
Bitte warten ..
Mitglied: rubberman
16.01.2011 um 20:17 Uhr
Hallo Power-Poler.

Das Flackern lässt sich nicht ganz abstellen und dass das Flackern nicht über die gesamte Ausgabe kommt liegt daran, dass du durch deine Erweiterung nicht mehr die gesamte Zeile überschreibst, was aber andererseits zu einer fehlerhaften Ausgabe führt (wenn du mal einen sinnvollen Text dran hängst, wirst du es merken). Du musst die Anzahl der Leerzeichen zwischen dem ersten und dem zweiten !cr! entsprechend erhöhen.

Grüße
rubberman
Bitte warten ..
Mitglied: jeb-the-batcher
17.01.2011 um 01:16 Uhr
Hallo zusammen,

das Flackern läßt sich ganz abstellen.

Man darf nur bei der Ausgabe nicht erst löschen und dann neu schreiben, sondern jeweils nur einmal mit dem neuen Inhalt überschreiben.
Dazu sollte man aber den neuen Inhalt an die Länge anpassen.

Also in etwa
01.
set "spaces=                               " 
02.
set "output=!output!!spaces!" 
03.
 
04.
<nul set /p ".=!output:~0,40!!cr!"
Schreibt also jeweils 40 Zeichen in die Zeile

Oder als Test
01.
@echo off 
02.
SETLOCAL EnableDelayedExpansion 
03.
cls 
04.
set "spaces=                               " 
05.
 
06.
for /f %%a in ('copy /z "%~f0" nul') do set "cr=%%a" 
07.
for /L %%n in (1,1,100000) DO ( 
08.
	set "output=Die aktuelle Zahl ist %%n" 
09.
	set "output=!output!!spaces!" 
10.
 
11.
	<nul set /p ".=!output:~0,40!!cr!" 
12.
)
Grüße
jeb
Bitte warten ..
Mitglied: rubberman
17.01.2011 um 01:23 Uhr
Hallo jeb.

Richtig. Aber diese Form führt dazu, dass der Cursor immer am Zeilenanfang steht, was bei langsamen Schleifen (wie die vom TO) dazu führt, dass er dort sichtbar wird. In meinen Augen auch nicht schöner

Grüße
rubberman
Bitte warten ..
Mitglied: 76109
17.01.2011 um 07:44 Uhr
Hallo zusammen!

Hier mal ne Lösung in HTA (*.hta) ohne flackern:
01.
<html> 
02.
<head> 
03.
<title>Countdownzähler</title> 
04.
<HTA:APPLICATION 
05.
     ID = "objAutoRefresh" 
06.
     ApplicationName = "Countdownzähler" 
07.
     SCROLL = "no" 
08.
     SINGLEINSTANCE="yes"/> 
09.
</head> 
10.
 
11.
<SCRIPT LANGUAGE="VBScript"> 
12.
    Sub Window_OnLoad() 
13.
        Window.ResizeTo 325, 140 
14.
        Window.MoveTo ((Screen.Width - 325) / 2), ((Screen.Height - 140) / 2) 
15.
        Text.InnerHTML = "Bis zum 18.04.2011 13:49:02 sind es noch:<p>" 
16.
        Call RefreshTime 
17.
        iTimerID = Window.setInterval("RefreshTime", 100) 
18.
    End Sub 
19.
 
20.
    Sub RefreshTime() 
21.
        D = CDate("18.04.2011 13:49:02") - Now 
22.
 
23.
        With document.all 
24.
            .Tag.Value = Right("     " & Int(D), 6) 
25.
            .Std.Value = "   " & Right("0" & Hour(D), 2) 
26.
            .Min.Value = "   " & Right("0" & Minute(D), 2) 
27.
            .Sek.Value = "   " & Right("0" & Second(D), 2) 
28.
        End With 
29.
    End Sub 
30.
</SCRIPT> 
31.
 
32.
<body bgcolor='buttonface' style='font-family:Arial;font-size:12px'><span id = "Text"></span> 
33.
<table border='0' style='font-family:Arial;font-size:12px'> 
34.
<tr> 
35.
<td><input type='text' name='Tag' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'></td> 
36.
<td>Tage&nbsp;&nbsp;</td> 
37.
<td><input type='text' name='Std' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'></td> 
38.
<td>Std&nbsp;&nbsp;</td> 
39.
<td><input type='text' name='Min' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'></td> 
40.
<td>Min&nbsp;&nbsp;</td> 
41.
<td><input type='text' name='Sek' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'></td> 
42.
<td>Sek&nbsp;&nbsp;</td> 
43.
</tr> 
44.
</table> 
45.
</body></html>
Gruß Dieter
Bitte warten ..
Mitglied: jeb-the-batcher
17.01.2011 um 10:49 Uhr
Zitat von rubberman:
Richtig. Aber diese Form führt dazu, dass der Cursor immer am Zeilenanfang steht, was bei langsamen Schleifen (wie die vom
TO) dazu führt, dass er dort sichtbar wird. In meinen Augen auch nicht schöner

Hallo rubbermann,

auch kein Problem, dann muss man nur die Zeile umstellen, dann steht der cursor auch am Ende
01.
<nul set /p ".=.!del!!cr!!output:~0,40!"
Grüße
jeb
Bitte warten ..
Mitglied: Power-Poler
17.01.2011 um 18:36 Uhr
Guten Abend
Dieter, das sieht ja richtig nice aus.
Was ist das? html, kenne die Endung hta nicht, aber laut Windows ist es irgendwas mit MS HTML Anwendungshost
Sieht Richtig gut aus.
Danke

Wegen des anderen, würde mich immer noch gerne damit beschäftigen, aber habe diese Woche leider relativ wenig zeit.
Zum Wochenende erst wider.
Schon alleine finde ich alle Sachen, die man mit Windows Bordmitteln machen kann ziemlich interessant.
Und nur um mal etwas in Richtung Programmieren zu gehen, würde ich mich da durch quälen.

Danke Leute für eure Unterstützung, Richtig toll hier das Forum.
Bitte warten ..
Mitglied: rubberman
17.01.2011 um 18:40 Uhr
Hallo jeb,

das ist natürlich eine Idee (an DEL hatte ich nicht gedacht).
Im ganzen Satz Batch
01.
@echo off &setlocal enabledelayedexpansion 
02.
 
03.
set "Bis=18.04.2011 13:49:02" 
04.
 
05.
:: CR erzeugen 
06.
for /f %%a in ('copy /z "%~f0" nul') do set "cr=%%a" 
07.
 
08.
: DEL erzeugen 
09.
for /f "delims=#" %%a in ('"prompt #$H# &echo on &for %%b in (1) do rem"') do set "del=%%a" 
10.
 
11.
:: VBScript erzeugen 
12.
set G=%temp%\GetTimeDiff.vbs  
13.
>%G% echo D=CDate(WScript.Arguments(0))-Now:WScript.Echo Int(D)^&" "^&Hour(D)^&" "^&Minute(D)^&" "^&Second(D) 
14.
 
15.
:Test 
16.
:: VBScript aufrufen 
17.
for /f "tokens=1-4" %%a in ('cscript //nologo "%G%" "%Bis%"') do set "output=%%a Tage %%b Stunden %%c Minuten %%d Sekunden     " 
18.
:: neue Ausgabe schreiben 
19.
<nul set /p ".=.!del!!cr!%output:~,45%" 
20.
goto Test
Grüße
rubberman
Bitte warten ..
Mitglied: 76109
17.01.2011 um 19:34 Uhr
Hallo Power-Poler!

HTA ist in vielen Dingen ganz nützlich und bietet in Verbindung mit VBS sehr viele Möglichkeiten.

Kurzbeschreibung:
Das Akronym HTA steht für HTMLApplication (HTML Anwendung). Es ist eine von Microsoft geschaffene Plattform für das Schreiben von Anwendungen die auf den normalen Standards von Internetseiten funktionieren (HTML, CSS, JavaScript, DOM...). Zusätzlich unterstüzt diese weitere Funktionen, die in normalen Web-Dokumenten nicht enthalten sind/sein können. HTA erstellt dabei eine selbstlaufende Anwendung die, ähnlich bei normalen Programmen, ausgeführt und verarbeitet werden kann.

Weitere Info's z.B. hier:
http://www.html-world.de/program/hta_ov.php
http://de.wikipedia.org/wiki/HTML-Applikation

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...