Jump to content
Adenium

Batchprogrammierung (Zeit-Ausgabe am Bildschirm)

Recommended Posts

Hallo.

Ich bin auf der Suche nach einer Lösung.

Ich möchte die Zeit am Bildschirm ausgeben, wobei die "neue"-Zeit immer die vorherige Zeit-Ausgabe überschreibt. (also in einer Schleife).

Die Zeit-Ausgabe soll zuerst vor dem Beginn eines Copy-Befehls anfangen in einer Schleife zu laufen, und wenn der Copy Befehl seine Aufgabe beendet hat, dann soll die neue Zeit (nach dem Copy) wieder ausgegeben werden.

Ist das möglich zu programmieren?

Danke im Voraus.

Adenium

Share this post


Link to post
Share on other sites

Klingt, als wolltest Du ein kleines Rad neu erfinden. ;-)

Hast Du schon mal über robocopy nochgedacht? Das zeigt Dir bei großen Dateien den Kopier-Fortschritt in Prozent und am Ende eine Zusammenfassung inklusive verstrichener Zeit.

Share this post


Link to post
Share on other sites

Nein, wollte ich nicht neu erfinden, denn ich benutze bereits den Robocopy.

Ich wollte wissen wie lang der Robocopy benötigt und deswegen die Lösung mit der Zeit.

Die Robocopy-Zusammenfassung gefällt mir nicht so sehr.

Analog zu der Robocopy-Prozent-Anzeige, will ich eine Zeit-Anzeige, die immer auf der selben Stelle ausgegeben wird.

Weißt du wie man das programmieren kann?

Danke.

 

Share this post


Link to post
Share on other sites

Was für eine Zeitverschwendung.  ;-)   ... aber als Fingerübung vielleicht ganz nett.

Zitat

Analog zu der Robocopy-Prozent-Anzeige, will ich eine Zeit-Anzeige, die immer auf der selben Stelle ausgegeben wird.

Du könntest robocopy in ein Log schreiben lassen und dieses periodisch lesen/parsen und Dir die Informationen entsprechend Deiner Vorlieben aufbereiten. Du kannst z.B. Write-Host anweisen, keine neue Zeile anzufangen. In einer Schleife steht das dann immer in der gleichen Zeile wenn Du manuell einen "Cariage Return" nach jeder Zeile einfügst.  Oder Du kannst mittels Escape-Sequenzen die Ausgabe Zeilen- und Spalten-genau ausgeben. Oder Du könntest Write-Progress verwenden - das wird automatisch oben am Konsolen-Fenster positioniert - da brauchst Du nix tricksen.

Zitat

Die Robocopy-Zusammenfassung gefällt mir nicht so sehr.

... siehe oben ;-)  ... Du liest die gewünschten Informationen aus dem Log und bereitest sie entsprechend Deiner Vorlieben auf.

vor 4 Stunden schrieb Nobbyaushb:

Es gibt eine GUI für Robocopy, muss den link mal suchen

Ist das nicht nur dazu da, die zahlreichen und zum Teil cryptischen Optionen zusammenzuklicken?

 

robocopy GUI 

 

Eine andere Alternative wäre noch RichCopy ...  https://docs.microsoft.com/en-us/previous-versions/technet-magazine/dd547088(v=msdn.10)?redirectedfrom=MSDN

Edited by BOfH_666

Share this post


Link to post
Share on other sites
12 hours ago, Adenium said:

Ich wollte wissen wie lang der Robocopy benötigt und deswegen die Lösung mit der Zeit.

Die Robocopy-Zusammenfassung gefällt mir nicht so sehr.

Was stört dich an der Zusammenfassung? Diese zeigt doch die gewünschten Infos an. Die Benötigte Zeit.

Share this post


Link to post
Share on other sites

Ich danke Euch für die Benennung von alternativen Copy-Programmen.

Mir geht es jedoch nicht um den Copy-Befehl, sondern um die Zeit-Anzeige am Bildschirm.

Ich könnte anstatt des Copy-Befehls auch jede andere beliebige Anweisung verwenden.

Ich würde gern wissen wie man das mit den vorhandenen DOS-Befehlen programmieren soll.

Vielen Dank

Adenium 

Share this post


Link to post
Share on other sites

Moin,

 

solche Dinge kann man mit der PowerShell viel besser erledigen. Da gibt es eigene Funktionen für Fortschrittsanzeigen.

 

Ansonsten findet man Batch-Tricks im Web sehr gut über naheliegende Suchbegriffe. Mit "batch echo overwrite" bin ich in Sekunden zu diesen Lösungen gekommen:

https://stackoverflow.com/questions/45381482/windows-echo-to-overwrite-previous-echo

 

Gruß, Nils

 

Share this post


Link to post
Share on other sites
vor 4 Stunden schrieb Adenium:

Ich würde gern wissen wie man das mit den vorhandenen DOS-Befehlen programmieren soll.

Oooops ... ich hatte angenommen, dass es hier um Powershell ginge, sorry. Naja, Nils hat Dich ja schon in die richtige Richtung geschubst. ;-)  ... und wenn Du's doch mal mit etwas Modernerem und vor Allem einfacher zu Schreibenden versuchen willst, schaust Du Dir mal das Powershell cmdlet Write-Progress an. 

 

Das sieht dann ungefähr so aus, wie in diesem Video: 

 

 

... was dort ausgegeben wird, kannst Du selbst festlegen. Es muss also keine Prozentzahl sein. ;-)  Schau Dir einfach mal die Hilfe an und spiel ein bissl mit den Beispielen.

 

 

Viel Spaß 

Share this post


Link to post
Share on other sites

@BOfH_666 Das sieht recht interessant aus. Auf  jeden Fall danke ich dir. Kann man eigentlich in ein BAT-Programm auch Powershell Befehle einbetten? und wie bringt man das Programm dann zur Ausführung? hab ich noch nie vorher gemacht.

@NilsK Das war ein guter "Schubs". Jetzt fange ich an mich mit Hilfe der Beispiele, an das Problem zu nähern. Wenn ich aus dem rufenden Programm ein Anderes, mit Hilfe des Call-Befehls aufrufe, werden das die beiden Programme (Rufer & Aufgerufener), parallel oder sequenziell ausgeführt? Zunächst möchte ich mich auch bei dir herzlich bedanken.

 

Share this post


Link to post
Share on other sites
vor 1 Stunde schrieb Adenium:

@BOfH_666 Das sieht recht interessant aus. Auf  jeden Fall danke ich dir. Kann man eigentlich in ein BAT-Programm auch Powershell Befehle einbetten? und wie bringt man das Programm dann zur Ausführung? hab ich noch nie vorher gemacht.

@NilsK Das war ein guter "Schubs". Jetzt fange ich an mich mit Hilfe der Beispiele, an das Problem zu nähern. Wenn ich aus dem rufenden Programm ein Anderes, mit Hilfe des Call-Befehls aufrufe, werden das die beiden Programme (Rufer & Aufgerufener), parallel oder sequenziell ausgeführt? Zunächst möchte ich mich auch bei dir herzlich bedanken.

 

Hmmm ... es ist nicht so richtig der Focus dieses Forums, Dir iterativ das Scripten beizubringen.  ;-) Das sind alles Anfängerfragen, die Dir ein gutes Buch, ein Anfänger-Online-Tutorial oder ein Video-Kurs in den ersten Kapiteln beibringt.  Ich empfehle immer gern den hier: Getting Started with PowerShell 3.0. Da werden Dir die Grundlagen vom Erfinder beigebracht. Ein guter Startpunkt ist auch hier: Getting Started with Windows PowerShell 

 

Powershell ist neuer. Daher ist es einfacher "alte" cmd-Befehle in Powershell zu benutzen als andersrum. Die meisten laufen ohne jegliche Anpassung auch unter Powershell.  Es gibt verschiedene Methoden "externe" Programme aus der Powershell heraus zu starten. Und man kann beeinflussen, ob das Script auf die Beendigung des externen Programms wartet, oder einfach asynchron (parallel) weiter läuft.

 

Am Besten, Du fängst erstmal an ein bissl zu basteln und wenn Du dann mit einem konkreten Stück Code nicht weiterkommst, kannst Du hier wieder fragen. Wir können üblicherweise viele besser helfen, wenn wir etwas zum "Handanlegen" haben.  ;-)

Share this post


Link to post
Share on other sites

"Fortschrittsanzeige" und "Zeit" sind 2 verschiedene Dinge. Die meisten User sind in der Lage, eine Uhrzeit zu lesen:

 

SCNR :-)

Persönlich bin ich ein absoluter Fan der Progress Bars, wenn Skripte viele Objekte bearbeiten und ich also auch etwas habe, das ich halbwegs zuverlässig zählen kann. Das mit "zuverlässig zählen" ist auch der Grund dafür, daß in Windows viele Progress Bars auf "endlos" umgestellt wurden. "Ja es passsiert noch was, aber wir wissen nicht wie lange es dauert".

Share this post


Link to post
Share on other sites

Ich glaube ja, wenn der Kollege Adenium erstmal merkt, wie aufwändig das wird, so eine Anzeige hinzubekommen, dass ihm dann die existierende robocopy Fortschritts-Anzeige gleich viel besser gefällt.  ;-)

 

Vielleicht bringt's ja auch sowas hier ... da bekommt man dann wenigstens die aktuelle Zeit immer in der Konsole angezeigt und auch wie lange der letzte Befehl zur Ausführung brauchte ... und es sieht cool aus

 

 

Share this post


Link to post
Share on other sites

Hallo und danke an alle, die bislang geantwortet haben.

Der Kollege BOfH_666 hat irgendwie Recht mit seiner Annahme, dass ich mich. A la Long, mit den Eigenschaften von Robocopy zufrieden geben werde.

Ich schildere mal die Problematik, so wie ich sie sehe (vereinfacht erklärt):

Wenn ich 3 Befehle untereinander codiere, z.B.

echo %time%

robocopy ....

echo %time%

Dann werden die 3 Befehle sequentiell ausgeführt. Das heißt, wenn der Robocopy sagen wir mal 10 Min. lang läuft, dann wird der zweite Echo-Befehl erst nach den 10 Min. des Robocopy ausgegeben.

 

Was ich ursprünglich wollte, war jedoch eine sich wiederholende Zeit-Ausgabe (in das selbe Fenster) während der Robocopy läuft.

Das bedeutet, dass 2 Programme gleichzeitig laufen müssen:

Prog1 müsste sich um die Schleife der sekundlich ausgegebenen Zeit-Displays kümmern, aber es  müsste auch das Prog2, in dem sich der Robocopy befinden müsste, aufrufen.

In Prog2 müsste auch ein Indikator auf 1 gesetzt werden bis der Robocopy zu Ende ist. Danach müsste der Indikator auf "0" gesetzt werden.

Da die beiden Programme parallel laufen würden, könnte den Indikator in Prog1 (innerhalb der Zeit-Schleife) jedesmal geprüft werden.

Soweit ich alles verstanden habe, würde sich der "CALL"-Befehl nicht eignen, da die Sequenz der aufgerufenen Befehle, sequentiell ausgeführt werden. Anstatt eines CALLs, könnte man auch einen START benutzen, aber dieser würde in einem separaten Fenster ausgeführt.

Ich denke, ich sollte mich von meiner o.g. Idee verabschieden.

Sollte jemand von Euch jedoch eine andere Idee haben, dann bin ich natürlich Offen.

Danke an Alle für das Mitdenken.

Adenium

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...