Gast Geschrieben 25. November 2019 Melden Teilen Geschrieben 25. November 2019 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 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 25. November 2019 Melden Teilen Geschrieben 25. November 2019 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. Zitieren Link zu diesem Kommentar
Gast Geschrieben 25. November 2019 Melden Teilen Geschrieben 25. November 2019 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. Zitieren Link zu diesem Kommentar
Nobbyaushb 1.475 Geschrieben 25. November 2019 Melden Teilen Geschrieben 25. November 2019 Es gibt eine GUI für Robocopy, muss den link mal suchen Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 26. November 2019 Melden Teilen Geschrieben 26. November 2019 (bearbeitet) 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 bearbeitet 26. November 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 26. November 2019 Melden Teilen Geschrieben 26. November 2019 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. Zitieren Link zu diesem Kommentar
Gast Geschrieben 26. November 2019 Melden Teilen Geschrieben 26. November 2019 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 Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 26. November 2019 Melden Teilen Geschrieben 26. November 2019 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 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 26. November 2019 Melden Teilen Geschrieben 26. November 2019 Nutze Powershell und "get-date". Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 26. November 2019 Melden Teilen Geschrieben 26. November 2019 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ß Zitieren Link zu diesem Kommentar
Gast Geschrieben 26. November 2019 Melden Teilen Geschrieben 26. November 2019 @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. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 26. November 2019 Melden Teilen Geschrieben 26. November 2019 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. Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 27. November 2019 Melden Teilen Geschrieben 27. November 2019 "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". Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 28. November 2019 Melden Teilen Geschrieben 28. November 2019 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 Zitieren Link zu diesem Kommentar
Gast Geschrieben 28. November 2019 Melden Teilen Geschrieben 28. November 2019 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.