phlegma
Goto Top

Fortschrittanzeige bei batch bzw batchkopiervorgang

moin.
Fortschrittanzeige, das soll die selbe funktion haben wie wenn man bei windows ne datei wohin verschiebt/kopiert
da kommt so ein kleines fenster in dem so ein balken langsam voll wird...

klar dass so eine perfekt windows copy unmöglich sein wird...
oder kann man einfach den explorer anweisen es zu kopiern und dann gibts so eine anzeige?

wenn nicht dann stell ich mir folgendes vor:
ich füre einen xcopy befehl aus( verzeichnis variabel) (nicht zwingeng xcopy aber am einfachsten für ein ganzes verzeichnis)
und vor jedem satz den er ausgibt steht eine zahl, die abnimmt im folgenden:
ausgabe:
3 xcopy XY1 YZ1
2 xcopy XY2 YZ2
1 xcopy XY3 YZ3
(0)
kopiervorgang beendet!

ansonsten wäre auch gut:
ausgabe:
3 
xcopy XY1 YZ1
2 
xcopy XY2 YZ2
1 
xcopy XY3 YZ3
(0)
kopiervorgang beendet!

oder einfach nur
ausgabe
3
2
1
(0)
kopiervorgang beendet!

und jetzt seid ihr wieder gefragt denn dafür kenn ich mal wieder nicht gut genug für aus....
ansonsten wäre eine andere ansehnliche idee zu einer methode, dass der benutzer sieht wie lang ca. der vorgang noch dauert, gut

grüße, Ph

Content-ID: 50704

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

36539
36539 04.02.2007 um 22:24:34 Uhr
Goto Top
Ich meine immer Aufwand und Nutzen. face-smile

entweder vor Kopieren-Befehl, den echo-Befehl "mit Kopieren von xyz läuft"
oder nach Kopier-Befehl den echo-Befehl mit "Kopieren von xyz ist beendet" osä.

Du musst nur dafür sorgen das die Ausgabe durch den Kopierbefehl unterdrückt wird.

Bsp, wie ich es anwende (dabei logge ich alles noch zusätzlich in eine *.txt)

echo.
echo =^> Daten fr neue Datensicherung werden zusammengestellt
echo =^> Daten für neue Datensicherung werden zusammengestellt >> "%startpfad%KSC-DataSafe_log.txt"
xcopy /K /R /E /I /S /C /H /Y /Q "F:\Vertrieb - CallCenter\Vertriebsinformationen" "%USERPROFILE%\Eigene Dateien\Datensicherung-KSC\Vertrieb - CallCenter\Vertriebsinformationen" >> "%startpfad%KSC-DataSafe_log.txt"
xcopy /K /R /E /I /S /C /H /Y /Q "F:\Vertrieb - CallCenter\Telefonakquise\DSD" "%USERPROFILE%\Eigene Dateien\Datensicherung-KSC\Vertrieb - CallCenter\Telefonakquise\DSD" >> "%startpfad%KSC-DataSafe_log.txt"
usw.....
echo.
echo =^> L”schen unn”tiger DB-Kopien [db(Ziffer).mdb] -"Ansichten"-
echo =^> Löschen unnötiger DB-Kopien [db(Ziffer).mdb] -"Ansichten"- >> "%startpfad%KSC-DataSafe_log.txt"
if /i not exist "%USERPROFILE%\Eigene Dateien\Datensicherung-KSC\Vertrieb - CallCenter\Telefonakquise\Datenbanken\Ansichten\db*.mdb" goto end_ksc02
del /f /s /q "%USERPROFILE%\Eigene Dateien\Datensicherung-KSC\Vertrieb - CallCenter\Telefonakquise\Datenbanken\Ansichten\db*.mdb" >> "%startpfad%KSC-DataSafe_log.txt"
:end_ksc02
usw....

gruß
onegasee59
Phlegma
Phlegma 05.02.2007 um 22:18:21 Uhr
Goto Top
moin,
jo is klar, aber dann ist ja auch nicht schlecht wenn angezigt wird welche datei kopiert wird,
ich brauche nicht zwingend ein logfile, aber ich hätte gerne eine anzeige die mir zeigt wie lang der vorgang noch dauert, bei zB 2gb kann das schon eine weile sein...

danke trotzdem, Ph
36539
36539 08.02.2007 um 15:24:12 Uhr
Goto Top
Hallo

...aber ich hätte gerne eine anzeige die mir zeigt wie lang der vorgang noch dauert...

Also ich kenne sowas nur in dem Download-Tool WGET integriert.
dort erfolgt eine Anzeige der Downloadgröße, wieviel bisher davon geladen ist und eine grafische Anzeige in der Form ================usw......................>
http://toolsandmore.de/Central/Produkte/Software/Internet/Download/wGet ...

Ich weiß allerdings nicht wie die das dort gemacht haben. Ich vermute aber das das ganze per Assembler gemacht wurde. Denn ich kann mir nicht vorstellen das man sowas auf ein paar Zeilen Batch hinbekommt.

Eventuelle haben aber Biber oder bastla oder miniversum hier im Forum eine zündende Idee.

gruß
onegasee59
Biber
Biber 09.02.2007 um 20:06:34 Uhr
Goto Top
Moin Phlegma,

das Thema ProgressBar ist ohnehin schon spannend genug...
.. da muss man/frau nämlich sogar dann ein wenig Schmalz reinstecken, wenn die Visualisierungsfunktionen schon da wären.
Du kannst ja nur 38% von etwas "anzeigen", wenn Du weißt, wieviel 100% sind.

100% der Kopierdauer ---> kennst Du nicht
100% der Gesamt-(Giga)-Bytegröße ---> kennst Du nicht
100% der Datei-Anzahl (zu kopierende Dateien)....*grumpf*...kennst Du auch eigentlich erst hinterher.

Und selbst wenn du etwas davon kennen würdest...
Du kannst dich ja bei z.B. dem XCopy-Befehl (der wildcard-orientiert und rekursiv arbeitet),
eigentlich nicht zwischen zwei Datei-Copy-Befehle hängen und sagen "wieder eine weniger zu kopieren".
Oder beim XCopy nach jeweils 10000 kopierten Byte ein Ereignis auslösen, dass einen Explorer-Progressbar aktualisiert.

Und im Batch isses schon gar möglich.
Liegt nicht daran, dass Batch nix taugt, sondern an der Anforderung.
Du kannst eben nicht, wie onegasee schon beschrieben hat, die Standardkomponenten wie XCopy oder ein anderes fertiges Tool zum "Arbeiten" nehmen und dann noch ein anderes hochspezialisiertes Tool wie einen ProgressBar dranpappen.

Aber weil bald Wochenende ist... eine Fortschrittsanzeige für Arme geb ich Dir mit...

:: --- snipp Hartz4ProgressBar.bat Biber 2007
@echo off & setlocal enableDelayedExpansion
:: --------von hier an anpassen
Set "sourcefiles=D:\temp1\*.*" & set "targetdir=d:\xyz\"  
Set "xcopyOpts= /s /e /y /h"  
:: --------bis hier her anpassen
Set "tmplist=%temp%\x2copy.lst  
xcopy %xcopyOpts% /L "%sourcefiles%" "%targetdir%" >%tmplist%  
for /f %%i in ('findstr "Datei(en)" %tmplist%') do Set /a Anzahl=%%i  
For /f "delims=" %%i in ('findstr /v "Datei(en)" %tmplist%') do call :XCopyIt "%%i" "%sourcefiles%"  
del %tmplist%
goto :eof

:XCopyIt Parameter1: FQ-Quelldateiname para2: Sourcefiles
Echo noch %Anzahl% Dateien...
set "targetsubpath=%~dp1"   
<b>ECHO</b> xcopy %xcopyOpts% %1 %targetDir%!targetSubpath:%~dp2=!
set /a Anzahl-=1
goto :eof

Beim Aufruf legt der also los....
(=20:01:16  F:\=)
>f:\temp\hartz4Progressbar.bat
noch 1673 Dateien...
xcopy  /s /e /y /h "D:\temp1\01000100..txt" d:\xyz\   
noch 1672 Dateien...
xcopy  /s /e /y /h "D:\temp1\0cooltest.ps1" d:\xyz\   
noch 1671 Dateien...
xcopy  /s /e /y /h "D:\temp1\106071_PSB_2006.xls" d:\xyz\   
....
.....
...und kommt Stunden später hier an...
noch 3 Dateien...
xcopy  /s /e /y /h "D:\temp1\Visio 2003\FILES\SETUP\SETUP.INI" d:\xyz\Visio 2003\FILES\SETUP\   
noch 2 Dateien...
xcopy  /s /e /y /h "D:\temp1\Visio 2003\FILES\SETUP\VISPRO.XML" d:\xyz\Visio 2003\FILES\SETUP\   
noch 1 Dateien...
xcopy  /s /e /y /h "D:\temp1\Visio 2003\FILES\WINDOWS\INF\AER_1031.ADM" d:\xyz\Visio 2003\FILES\WINDOWS\INF\   
[Das fette ECHO ist wie immer nur zum Testen und muss zum Scharfmachen raus.]

Nicht nobelpreisverdächtig, aber eine/n Benutzer/in, der/die sonst gar nichts auf dem Bildschirm sieht, könnte es beruhigen...

Gruss
Biber
Phlegma
Phlegma 10.02.2007 um 15:49:46 Uhr
Goto Top
hihi!
ah das hört sich super an, biber!!
ich wusste doch dass es möglich ist!
mir reicht das vollkommen... so hartz4 is es doch gar nicht... face-smile


nun, wieder das übliche.. ich versteh nix .. xD

also ich kann das jetzt einfach so aufnehmen und froh sein ... oder du erklärst mir das jetzt nochmal stück für stück... aber überarbeite dich bitte nich wegen mir...

so dann wärn da noch 2 sachen...
1. nochmal vom anfang.. dieser windows explorer, der fabriziert so schöne windows fortschrittsanzeigen... kann man sich das nich per befehl zu nutze machen?

2.
Und im Batch isses schon gar möglich. 
ich glaub da fehlt ein "nicht" oder?

vielen dank!!
Ph
Biber
Biber 10.02.2007 um 16:29:28 Uhr
Goto Top
Moin Phlegma,

zu 2)
Jepp, da hab ich das "nicht" vergessen.
zu 1) Lässt sich nicht der Explorer-ProgressBar nutzen?
Doch, natürlich.
Habe irgendwo im Forum auch schon mal eine Skizze dazu gepostet.
Aber:
- es geht nicht sinnvoll über Batch. Von daher--->neues Thema (und vorher die folgenden Bedenken sacken lassen)
- wie oben geschrieben - das Werkzeug zur Visualisierung von Prozentangaben ist da. Aber die Prozentangaben nicht.
Du hast NIEMALS einen Wert von 38%, den Du in einenm Schiebebalken darstellen kannst.
Und der zweite Einwand - bei einem Befehl, den Du abschickst als "Starte Prozess KopierMalAllsWasDaIst" ist das ein klarer Auftrag an den Prozess.
Der macht das und sacht "Fertig", wenn er fertig ist. Da bekommst du keine Zwischenberichte "Hier Xcopy, bin mit Datei 265 von 3097 beschäftigt.."

Kurz gesagt... aus meiner Sicht ist es das nicht wert, da viel Aufwand reinzustecken... irgendwo gibt es bestimmt ein Freewaretool "Massen-Copy mit Visualisierung". Ich hab keins.

Zu der Erläuterung, was in dem Batchschnipsel abgeht:
:: --- snipp Hartz4ProgressBar.bat Biber 2007
@echo off & setlocal enableDelayedExpansion
:: --------von hier an anpassen
REM Ich gehe davon aus, dass es einen zu kopierenden Datenklumpen, z.b. alle Dateien aus "D:\Temp" gibt und einen Zielordner "d:\xyz"  
REM die beiden könnten/würden in einem produktiven/flexibleren Batch als Parameter %1  und %2 übergeben werden.
REM Wichtig dabei: Parameter %2 (%targetDir%) sollte einen abschliessenden Backslash haben.
REM Damit XCopy rafft, dass es ein Verzeichnis ist, keine Datei.
Set "sourcefiles=D:\temp1\*.*" & set "targetdir=d:\xyz\"  
REM Hier also <i>eigentlich</i> ergänzen: 
if [%1] NEQ  set "sourcefiles=%~1"  
if [%2] NEQ  set "targetDir=%2"  
REM XcopyOpts sind die XCopy-Optionen, mit denen kopiert werden soll. Siehe XCopy /?
Set "xcopyOpts= /s /e /y /h"  
:: --------bis hier her anpassen
Set "tmplist=%temp%\x2copy.lst"  && REM eine temporäre Textdatei lege ich an...  

REM Alles in %tmplist% schreiben, was XCopy kopieren <i>würde</i>... beachte den Parameter /L wie /List
xcopy %xcopyOpts% /L "%sourcefiles%" "%targetdir%" >%tmplist%  
REM Alles, was Xcopy in einem Schwung kopiert <i>hätte</i> kopiere ich jetzt häppchenweise Datei für Datei gemäß der Liste

REM Vorher lese ich noch die Gesamtanzahl...die steht auch in der Liste.. und merke mir die in %Anzahl%
for /f %%i in ('findstr "Datei(en)" %tmplist%') do Set /a Anzahl=%%i  

REM häppchenweise Datei für Datei gemäß der Liste kopieren bzw XCopyIt-Block aufrufen...
For /f "delims=" %%i in ('findstr /v "Datei(en)" %tmplist%') do call :XCopyIt "%%i" "%sourcefiles%"  
REM Jetzt ist die Liste abgearbeitet... aufräumen...
del %tmplist%
REM Ende von alles... hier kann auch noch ein "Echo fertig..." und ein "pause" hin  
goto :eof


REM XcopyIt bekommt den vollständigen Dateinamen (fully qualified) und als zweiten Parameter das Root-Verzeichnis der Quelldateien.
REM weil ich ja in das "richtige" Zile-Unterverzeichnis kopieren will (D:\temp\1.txt nach D:\xyz\1.txt; D:\Temp\sub\subsub\2.txt nach D:\xyz\sub\subsub\)  
:XCopyIt Parameter1: FQ-Quelldateiname para2: Sourcefiles
Echo noch %Anzahl% Dateien...
set "targetsubpath=%~dp1"   
REM Na ja...diese und die nächste Zeile vielleicht zweimal lesen... Parameter 1 ist z.B "D:\temp\sub\subsub"  ->davon braiche ich das "sub\subsub"  
REM Alles, was davor steht ("D:\Temp") kann wech... gehört nicht in die Zielpfadangabe  
ECHO xcopy %xcopyOpts% %1 %targetDir%!targetSubpath:%~dp2=!
set /a Anzahl-=1
goto :eof
das ist das Problem mit diesen Kurzschnipseln... die Erläuterung braucht immer Seiten....*brummel*

HTH Biber
der immer noch weitere blutjunge rothaarige Praktikantinnen zum Erstellen von Batch-Dokumentationen sucht...
Phlegma
Phlegma 11.02.2007 um 15:48:39 Uhr
Goto Top
hi!
schön!
danke dir, werde wohl trotzdem wieder ne weile brauchen um das zu verstehen... bin zudem gerade krank... blöde krankheitswelle

vielen dank! Ph

zum testen kam ich auch noch nicht ... erstmal gelöst!
Biber
Biber 11.02.2007 um 16:40:38 Uhr
Goto Top
Moin Phlegma,

hmm..."erstmal gelöst"..."so gut wie fertig"..."ein bisschen schwanger"..."erste Stufe der Gesundheitsreform"....

Ich behaupte mal, was zum Thema "Fortschrittsanzeige bei Batchkopiervorgang" zu sagen ist, ist gesagt.

Zum Thema "Strategien und Fussangeln bei Fortschrittsanzeigen" können wir nochmal unter "Entwicklung"/"Programmierung" einen Brainstormingthread lostreten.
Denn das ist werkzeug-/programmiersprachenunabhängig.
Und durchaus eine Diskussion wert - jeder kennt die lustigen Fortschrittsbalken, die stundenlang bei 15% oder auch manchmal bei 100% verweilen, ganz offensichtlich noch auf der Platte rumrödeln, aber ....irgendwie scheint das nichts mit der Gesamtaufgabe zu tun zu haben.
Oder die Fortschrittsanzeigen mit "281% kopiert..."
Ist ja nicht mal so, dass nur M$ da ein Problem mit hat, das gibt es auch bei Mac OS 10 oder Linux.

Anyhow... diesen Beitrag setz ich erstmal auf "Geschlossen" - auf Wunsch werde ich ihn natürlich wieder öffnen.

Dir erstmal gute Besserung
Gruss
Biber