37414
Goto Top

Batch mit Fortschrittsanzeige

Hallo,

ich habe nun schon mehrere Threads über das Thema gelesen und auch eine Batch erzeugt.
Ein kleiner Teil fehlt mir aber noch.
Vielleicht könnt Ihr mir helfen.

Die hier unten einkopierte Batch macht folgendes:

1) notepad.exe wird geöffnet
2) gleichzeitig beginnt eine Schleife, worin ein Fortschrittsbalken aus roten #-Zeichen beginnt zu laufen
3) während dessen wird eine Datei "test.txt" auf den Desktop kopiert
3) dieser Balken läuft so lange, bis ich die notepad.exe manuell schließe
4) am Ende erscheint eine Erfolgsmeldung "KOPIEREN ERFOLGREICH BEENDET!"

Ich möchte aber nun folgendes erreichen:

1) der Kopiervorgang soll nach dem Start der Batch durch einen Tastendruck beginnen
2) dann erst soll der Lauf der Fortschrittsbalken beginnen und die notepad.exe soll sich (möglichst minimiert) öffnen
3) während des Kopierens soll der Balken weiter laufen
3) sobald der Kopiervorgang abgeschlossen ist, soll notepad.exe automatisch geschlossen werden
4) nun soll die Erfolgsmeldung "KOPIEREN ERFOLGREICH BEENDET!" erscheinen und die Batch soll mit "pause > nul" beendet werden.

@echo off &setlocal
color 0c

:: *Notepad als Beispiel für einen Fortschrittsbalken:
start "" "notepad.exe"  

:: *Schleife laufen, bis Prozess sichtbar ist
:loop1

:: Beginn Kopiervorgang - vielleicht besser an einer anderen Stelle der Batch???
copy c:\TEST22.txt C:\Users\imebro\Desktop>nul

tasklist /nh /fi "imagename eq notepad.exe" 2>&1|findstr /b /i /l /c:"notepad.exe">nul &&goto loop2  
ping -n 1 localhost>nul
goto loop1

:: *Schleife laufen und Balkenzeichen malen, bis Notepad geschlossen ist
:loop2
<nul set /p "=#"  
tasklist /nh /fi "imagename eq notepad.exe" 2>&1|findstr /b /i /l /c:"notepad.exe">nul ||goto ahead  
ping -n 2 localhost>nul
goto loop2
:ahead

echo.
echo.
echo KOPIEREN ERFOLGREICH BEENDET!
echo.
echo.
pause > nul

Hat jemand von Euch eine Idee?

Danke schon jetzt für Eure Hilfe.

Schöne Grüße,
imebro
Kommentar vom Moderator Biber am 03.02.2012 um 18:45:42 Uhr
Auf "Hinreichend beantwortet" gesetzt.

Content-Key: 179734

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

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: AndreasHoster
AndreasHoster 30.01.2012 um 12:29:17 Uhr
Goto Top
Ich persönliche finde ja, sowas per Batch zu lösen grenzt an Masochismus, aber wer will darf sich ruhig selber quälen.
1) der Kopiervorgang soll nach dem Start der Batch durch einen Tastendruck beginnen
Wie wäre es mit dem Befehl pause?
3) während des Kopierens soll der Balken weiter laufen
Dann solltest Du nicht innerhalb der Batch den copy Job starten, der blockiert die Batch nämlich bis er fertig ist.
Wie wäre es mit start zu arbeiten und damit den copy Job in eine weitere Task zu starten?
2) dann erst soll der Lauf der Fortschrittsbalken beginnen und die notepad.exe soll sich (möglichst minimiert) öffnen
3) sobald der Kopiervorgang abgeschlossen ist, soll notepad.exe automatisch geschlossen werden
Weshalb den Notepad?
Starte doch als Kopierjob xcopy und frage in Tasklist xcopy ab, obs noch läuft.
Wenn jemand den Editor öffen hat, weil er was sehen will, tut Deine Idee nämlich nicht mehr.
Und falls Du das Problem eines parallel laufenden xcopy umgehen willst, mach eine Kopie von xcopy, nenne es xcopy_meineKopie, ruf das auf und frage mit Tasklist diesen neuen Namen ab.
Mitglied: 37414
37414 30.01.2012 um 13:32:01 Uhr
Goto Top
Hallo und danke für Deine Ausführungen,

wie genau müßte ich das umsetzen?
--> mit start arbeiten und den copy Job in einer weiteren Tast starten

ebenso ist mir nicht klar, wie ich den Kopierjob (xcopy) per Tasklist abfragen soll (ob´s noch läuft).

Vielleicht kannst Du diese beiden Dinge ja mal in meine Datei (siehe oben) einflicken face-smile

Die obige Datei ist nur als Beispiel gedacht. Der Start und das Beenden von "notepad.exe" dienten lediglich dazu,
Beginn und Ende des Fortschrittsbalkens beeinflussen zu können... da soll dann stattdessen der Kopiervorgang ausgelagert werden,
wenn ich Dich richtig verstanden habe...?

Im Grunde geht es darum, eine vorhandene Batch, mit der ich regelmäßig einen bestimmten Kopierjob erledige, so anzupassen,
dass mir ein Fortschrittsbalken angezeigt wird, der so lange laufen soll, bis der Kopiervorgang beendet ist.

Also:
- Batchdatei starten
- Beginnen mit Dateien kopieren von A -> nach B
- mit Start des Kopiervorgangs erscheint der Fortschrittsbalken
- wenn der Kopiervorgang zu Ende ist, soll der Fortschrittsbalken enden
- Ausgabe des Hinweises "Erfolgreich beendet"
- Batchdatei Ende!

Danke und schöne Grüße,
imebro
Mitglied: 37414
37414 30.01.2012 um 14:15:53 Uhr
Goto Top
Habe eben nochmal überlegt und vielleicht würde es ja auch so gehen:

1) Batch Nr. 1 „Fortschrittsbalken“ starten mit „sleep 3“ (damit der Balken erst startet, wenn der Kopiervorgang schon begonnen hat).
2) Mit Befehl CALL die Batch Nr. 2 „meine Sicherungsdatei“ starten
.....Batch Nr. 1 (Hauptdatei) läuft weiter inkl. Fortschrittsbalken...
3) sobald Batch Nr. 2 „meine Sicherungsdatei“ zu Ende ist, wird wieder an Batch Nr. 1 „Fortschrittsbalken“ übergeben
4) Batch Nr. 1 „Fortschrittsbalken“ wird dann beendet mit den „Erfolgreich-kopiert-Meldungen...“ etc.
5) start der LOG-Datei --> ENDE

Andersrum würde auch gehen, wenn man aus der Hauptdatei (dann „meine Sicherungsdatei“) die durch CALL aufgerufene Datei „Fortschrittsbalken“ beenden kann...

Wäre das ggf. eine Möglichkeit?

Wenn ja, wäre es schön, wenn jemand von Euch meine obige Datei mal so anpassen könnte.

Danke & Gruss,
imebro
Mitglied: AndreasHoster
AndreasHoster 30.01.2012 um 14:27:46 Uhr
Goto Top
Du bekommst es hin, mit tasklist nach Notepad abzufragen, aber eine Abfrage nach xcopy nicht?
Dann ist die obige Batch wohl auch nicht aus Deiner Feder, oder?

Hier mal eine neue Version
@echo off &setlocal
color 0c

:: Es soll ja erstmal gewartet werden
pause > nul

:: *Schleife laufen, bis Prozess sichtbar ist
:loop1

:: Beginn Kopiervorgang - vielleicht besser an einer anderen Stelle der Batch???
start "Kopieren" /min xcopy.exe c:\TEST22.txt C:\Users\imebro\Desktop\ > nul  

tasklist /nh /fi "imagename eq xcopy.exe" 2>&1|findstr /b /i /l /c:"xcopy.exe">nul &&goto loop2  
ping -n 1 localhost>nul
goto loop1

:: *Schleife laufen und Balkenzeichen malen, bis Notepad geschlossen ist
:loop2
<nul set /p "=#"  
tasklist /nh /fi "imagename eq xcopy.exe" 2>&1|findstr /b /i /l /c:"xcopy.exe">nul ||goto ahead  
ping -n 2 localhost>nul
goto loop2
:ahead

echo.
echo.
echo KOPIEREN ERFOLGREICH BEENDET!
echo.
echo.
pause > nul

Hat allerdings zwei grundlegende Probleme:
1. Solange irgendein XCOPY läuft (auch ein anderes) zählt er weiter, daß könnte man, wie oben schon geschrieben, mit einer Kopie des xcopy Programms mit einem eindeutigen Namen umgehen.
2. Falls durch einen Fehler xcopy sich beendet, bevor der tasklist Befehl in Zeile 13 gelaufen ist, hängst Du in einer Endlosschleife.
Mitglied: pieh-ejdsch
pieh-ejdsch 30.01.2012 um 14:33:08 Uhr
Goto Top
moin Imebro,

also ohne viel hin oder her bzw Taskman prüfungen
wie auch in dem Thread: .bat Aufruf mittels angeschlossenen Taster soll nur genau 1x erfolgen

geht völlig ohne extra CMD Contex; aber der Log lässt sich nur in so einem Contex führen.

@echo off &setlocal

set "File=%temp%\xcopyLogFile%random%"  

start "" /min Xcopy /y "D:\Eine Datei" "D:\Neuer Ordner" >"%File%"  

echo Kopieren hat begonnen!

:Test
<nul set/p=#
(echo( >"%File%") 2>nul || (ping localhost -n 2 1>nul &&goto :Test)  

echo(
echo(
echo(
echo Kopieren ist Fertig!
echo(
echo(
pause
goto :eof
Mitglied: 37414
37414 30.01.2012 um 15:03:43 Uhr
Goto Top
Hallo und danke für die schnellen Antworten.

  • ja, die obige Datei stammt nur zum Teil aus meiner Feder... den Rest habe ich aus einem anderen Thread kopiert.

Werde die Möglichkeiten später zu Hause mal testen und bin schon gespannt.

Die von mir angesprochene Möglichkeit mit dem Aufruf einer weiteren Batch durch CALL, würde mir auch nicht ganz so gut gefallen, da dann ggf. 2 Fenster offen wären.
Es sei denn, man könnte die Hauptdatei (die Dateien kopiert) sofort nach Start der Balken-Datei minimieren und nach dem Kopiervorgang und beenden der Balken-Datei die Hauptdatei wieder maximieren und bis zum Ende abarbeiten.

Das wäre noch eine Alternative.
Aber zunächst werde ich mal Eure Varianten testen.

Danke und schöne Grüße,
imebro
Mitglied: 37414
37414 30.01.2012 um 15:52:19 Uhr
Goto Top
Hallo...

...konnte es jetzt doch nicht abwarten face-smile
Habe mit einem Dummy-Kopiervorgang getestet (150 MB großes Verzeichnis von C:\ nach D:\ kopiert).

Das Beispiel von "Andreas Hoster" hat funktioniert.

Habe aber die Angabe zum warten ganz oben (pause > nul) raus genommen.
Dann startet der Fortschrittsbalken sofort und endet, sobald sich das minimierte Kopierfenster automatisch geschlossen hat.

Perfekt bis dahin!!!

Nun muss ich das alles noch in meine bestehende Kopier-Batch zu Hause einsetzen... mal sehen, wie ich das hinbekomme.

Danke nochmals und schöne Grüße,
imebro
Mitglied: 37414
37414 31.01.2012 um 08:28:46 Uhr
Goto Top
Hallo nochmal,

im Grunde läuft die Datei gut.
Allerdings gibt es noch ein Problem, welches ich nicht so ganz verstehe... bzw. nicht lösen kann.

Ich habe Euch dazu hier mal meine komplette Kopier-Batch-Datei eingesetzt, damit Ihr mir (hoffentlich) bei der Lösung helfen könnt.

Nochmal zur Info:

Im Grunde sichert die Datei nur die auf meiner Festplatte gesicherten Daten automatisch auf die externe Festplatte. Natürlich ist das "Spielerei", aber wenn es klappt, würde ich das Ganze gerne noch weiter ausbauen. Ohne die Zusätze bezüglich "Fortschrittsbalken" (siehe innerhalb der per REM-Befehl mit Strichen (----) markierten Bereiche) funktioniert die Datei einwandfrei!!

Hier der Code:

@ echo off
title BACKUP

REM Kopieren der Backupdateien von G:\Backup auf externe Festplatte
echo.
echo.
echo.
echo.           *****************************************************************
echo.           *                                                               *
echo.           *                   Aktualisieren des BACKUPS                   *
echo.           *                                                               *
echo.           *               Laufwerk G --> Externe Festplatte               *
echo.           *                                                               *
echo.           *          --- nur veraenderte Daten werden kopiert ---         *
echo.           *                                                               *
echo.           *****************************************************************
echo.
echo.                                 (c) imebro 2012
echo.
echo.
echo.
echo.           *****************************************************************
echo.           * Zuerst die externe FP anschliessen! - Weiter mit Tastendruck! *
echo.           *****************************************************************

pause > nul
echo.
echo.
echo.

CHOICE /C JN /M ".     Kopiervorgang beginnen?"  
if errorlevel 2 goto ENDE
if errorlevel 1 goto WEITER

:WEITER

C:\Windows\sleep.exe 2

echo.
echo.
echo.           **************************************
echo.           * Der Kopiervorgang wurde gestartet! *
echo.           **************************************
echo.

C:\Windows\sleep.exe 2

REM ---------------------------------------------------------------------------------------------------
REM *Schleife laufen lassen, bis Prozess sichtbar ist
:loop1

start "Kopieren" /min xcopy.exe G:\Backup-imebro I:\Backup-imebro /D /F /R /S /Y 1>c:\LOG_BATCH.LOG 2>&1  
REM ----------------------------------------------------------------------------------------------------


REM --------------------------------------------------------------------------------------------------
tasklist /nh /fi "imagename eq xcopy.exe" 2>&1|findstr /b /i /l /c:"xcopy.exe">nul &&goto loop2  
ping -n 1 localhost>nul
goto loop1

REM *Schleife laufen lassen und Balkenzeichen malen, bis kopieren zu Ende ist
:loop2
<nul set /p "=#"  
tasklist /nh /fi "imagename eq xcopy.exe" 2>&1|findstr /b /i /l /c:"xcopy.exe">nul ||goto ahead  
ping -n 2 localhost>nul
goto loop2
:ahead
REM ---------------------------------------------------------------------------------------------------

echo.
echo.
if errorlevel 4 goto SYNTAX
if errorlevel 1 goto FEHLER
if errorlevel 0 goto ERFOLG

echo.
echo.
echo.

:SYNTAX
echo.      Ungueltiges Laufwerk oder Syntax! - Programm mit Tastendruck beenden!

pause > nul
goto ENDE

:FEHLER
echo.      Keine Dateien zum kopieren gefunden! - Programm mit Tastendruck beenden!

pause > nul
goto ENDE

:ERFOLG
echo.           **********************************************************
echo.           * Das Backup auf der ext. Festplatte wurde aktualisiert! *
echo.           **********************************************************
echo.
echo.
echo.
echo.      Programm mit Tastendruck beenden - Zielverzeichnis und LOG wird geoeffnet

pause > nul

start I:\Backup-imebro
start C:\LOG_BATCH.LOG

:ENDE

Folgendes passiert bei der Ausführung:

Es erscheint folgende Fehlermeldung (Zeile Nr. 87) aus der Batch (siehe Errorlevel):

„Keine Dateien zum kopieren gefunden! - Programm mit Tastendruck beenden!“

Ich vermute, dass das Problem innerhalb der per REM-Befehl mit Strichen (----) markierten Bereiche liegt.
Ggf. müßten die Zeilen Nr. 57 und 64 angepaßt werden, da dort nur "2>&" steht.
Wenn ich jedoch die Angaben aus dem Kopiervorgang in Zeile Nr. 52 dort einsetze (1>c:\LOG_BATCH.LOG 2>&1), dann erhalte ich die oben angegebene Fehlermeldung.

Was mache ich falsch?

Vielen Dank und schöne Grüße,
imebro
Mitglied: AndreasHoster
AndreasHoster 31.01.2012 um 14:54:15 Uhr
Goto Top
Das Problem liegt in mangelndem Verständnis.

Die Errorlevel-Abfrage ist für die Katz.
Was willst Du damit denn abfragen? Vermutlich den Wert den XCOPY zurückgibt, aber den wirst Du nie bekommen, da XCOPY in einer separaten Batch läuft.
Du fragst den letzten Befehl vor Errorlevel ab, nämlich findstr. Und der ist immer 1, ansonsten würdest Du ja nicht aus der Schleife rausfliegen.

Wenn Du schon wissen willst, ob xcopy richtig lief, dann solltest Du die Log Datei parsen, die Du erzeugst.
Mitglied: 37414
37414 31.01.2012 um 15:17:08 Uhr
Goto Top
Hallo und danke für Deine weitere Hilfe.

Bedeutet das, dass ich den kompletten Errorlevel-Bereich (Zeilen Nr. 72 - 87) entfernen soll?

Und... muss ich - wie in meinem letzten Posting geschrieben - auch die Zeilen Nr. 52, 57 und 64 so anpassen, damit auch eine LOG-Datei erstellt wird oder kann das Alles so bleiben, wie es jetzt ist?

Vielen Dank & schöne Grüße,
imebro
Mitglied: pieh-ejdsch
pieh-ejdsch 31.01.2012 um 15:47:00 Uhr
Goto Top
moin,

Zeile 52:
start "Kopieren" /min xcopy.exe G:\Backup-imebro I:\Backup-imebro /D /F /R /S /Y 1>c:\LOG_BATCH.LOG 2>&1   

das wird Dir niemals einen Log schreiben


Zitat von @pieh-ejdsch:
geht völlig ohne extra CMD Contex; aber der Log lässt sich nur in so einem Contex führen.

Dann schreib Deine Log Zeile anders wenn Du sie auswerten willst:
start "Kopieren" /min cmd /c "xcopy.exe G:\Backup-imebro I:\Backup-imebro /D /F /R /S /Y 1>c:\LOG_BATCH.LOG 2>&1"   

Deine Chronologischen Meldungen sind nicht ganz passend.
erst gibst Du die Meldung Kopiervorgang wurde gestartet
und danach startest Du und weisst nicht ob es Starten konnte.

Gruß Phil
Mitglied: 37414
37414 31.01.2012 um 20:12:52 Uhr
Goto Top
Hallo Phil,

danke Dir für Deine Tipps.

Habe es eben so umgestellt... auch die Error-Zeilen gelöscht... und es funktioniert prima!!

Ich habe auch die Meldung "Kopiervorgang gestartet" jetzt NACH dem Beginn des Kopierens eingesetzt face-smile

Aber 3 Fragen hätte ich noch:

1) Geht es, dass der Fortschrittsbalken nicht ganz links in der Ecke beginnt sondern etwas weiter nach rechts?

2) Kann man die Farbe des Fortschrittsbalkens (nur dessen Farbe!!) verändern?

3) Kann man die Geschwindigkeit des Fortschrittsbalkens verändern? Dass also z.B. mehr der "#"-Zeichen in kürzerer Zeit angezeigt werden?


Danke und schöne Grüße,
imebro
Mitglied: Biber
Biber 31.01.2012 um 21:59:52 Uhr
Goto Top
Moin imebro,

Zitat von @37414:
Aber 3 Fragen hätte ich noch:
Hmmm, du weisst aber, dass dieses "Einen hab ich noch"-Nachkanten nicht sehr beliebt ist bei einigen der hier ansässigen Hilfsmoderatoren?

1) Geht es, dass der Fortschrittsbalken nicht ganz links in der Ecke beginnt sondern etwas weiter nach rechts?
Nein, nicht wirklich. Nur mit unsauberen Tricks, die den ernsthaften Eindruck deines Arbeits- und Gebrauchsbätsches mindern.
Wozu also?

2) Kann man die Farbe des Fortschrittsbalkens (nur dessen Farbe!!) verändern?
Ja... mit dem Befehl COLOR (siehe color /? am CMD-Prompt)

3) Kann man die Geschwindigkeit des Fortschrittsbalkens verändern? Dass also z.B. mehr der "#"-Zeichen in kürzerer Zeit angezeigt werden?
Ja , durch Verkürzen der Wartezeit (statt "ping -n 2" halt nur ping -n 1") oder noch kürzer mit "sleep.exe" oder ähnlichem.
Viel simpler allerdings ist es, jeweils zwei oder drei '-Zeichen pro Aufruf malen zu lassen
<nul set /p "=###" 

Grüße
Biber
Mitglied: pieh-ejdsch
pieh-ejdsch 31.01.2012 um 22:04:39 Uhr
Goto Top
moin imebro,

zu 1. setz einen Punkt vor den Freiraum und dann set /p... ist im Script angezeigt
zu 2. nur eine Zeile ---> Nein
zu drittens ja den wait verändern

das mit den Meldungen hab ich noch etwas Geordnet
Bei Abbruch kommt eine entsprechende Meldung und die Errormeldungen sind sofort ablesbar.

Praktischerweise ist es eine bessereArt Tee zu verwenden Vergleichbar mit Batch - mit und ohne tee - Konsoleausgaben zugleich in eine Datei leiten und auf dem Bildschirm ausgeben
nur noch mit zusätzen

Du kannst den Hauptbach auch abbrechen - eine Zweite instanz wird an der stelle weiter Anzeigen
Die Xcopy Batch kann auch abgebrochen werden und es ist sofort nachlesbar im Hauptbatch.

@ echo off &setlocal
title BACKUP
set "prompt=$g"  
::echo on

 rem ----- Einstellungen

set             "LogFile=D:\LOG_BATCH.LOG"  
set              "Quelle=D:\Eingang"  
set                "Ziel=D:\Backup\"  
set                 Wait=2
set              "FTitel=Backup wird zurzeit Durchgefuehrt"  
set /a  x  =  1  ,  ax  = 60

 rem -----LetzteMeldungAnzeigen und je 2 doppelpunkte davor

   set       "NICHT_Anzeigen=1>nul"  
:: set "NICHT_FehlerAnzeigen=3>nul"  

 rem ----- Ende Einstellungen

(
if not defined LogFile echo          LogFile nicht definiert&pause&goto :eof
if not defined Quelle (echo          Quelle nicht definiert&pause&goto :eof) else if not exist "%Quelle%" echo          Quelle: "%Quelle%" nicht gefunden&pause&goto :eof  
if not defined ziel echo          Ziel nicht definiert&pause&goto :eof
)>&2
for %%i in (%LogFile%) do type nul >"%%~dpitest.log" &&del "%%~dpitest.log" ||(echo          LogFile kann nicht geschrieben werden! Kontrollieren!&pause&goto :eof)>&2  

 rem sucht nach Bevorzugter Wartefunktion
"C:\Windows\sleep.exe" 1 2>nul >&2 && set "Warte=2>nul >&2 "C:\Windows\sleep.exe" " || waitfor 2>&1 |find "FEHLER:" >nul && set "Warte=2>nul >&2 Waitfor x /t " || set "Warte=2>nul >&2 ping localhost -n "  

set "LogName=%Quelle%--%ziel%"  
set "OrigLog=%LogFile%"  
:Logname
for /f "tokens=1*delims=\:*?" %%i in ("%Logname%") do if "%%i" neq "%Logname%" set "Logname=%%i_%%j" & goto :Logname  
for %%i in ("%LogFile%") do set "Logfile=%%~dpni_%Logname%%%~xi"  
set "Last=0"  
for %%i in ("%LogFile%") do set "LastBUtime=%%~ti" &if exist %%i (set "BStatus=1") else set "BStatus="  

 rem LetzteMeldungAnzeigen
%NICHT_Anzeigen% %NICHT_FehlerAnzeigen% (
(<"%LogFile%" find "Datei(en) kopiert") 2>nul >&2 && (echo(&echo(         Letzte Backup Meldung^(en^): %LastBUtime%&<%LogFile% find "Datei(en) kopiert" &set "Abort=") || set "Abort=1"  
for /f "tokens=1*delims=:" %%i in ('  
 findstr /r /c:"Syntaxfehler." /c:"Datei .* nicht gefunden" /c:"Datei kann nicht auf sich selbst kopiert werden" /c:"Unzul„ssige Parameteranzahl" /c:"Ungltige Laufwerkangabe" /c:"Kopiervorgang konnte nicht gestartet werden!" /c:"Der Befehl .* ist entweder falsch geschrieben" /c:"konnte nicht gefunden werden." "%LogFile%"  2^>nul ^|findstr /n "^"   
') do (set "Abort=1"&if %%i equ 1 (echo(&echo(         Letzte Backup Fehler!-meldung^(en^):&echo(%%j) else echo(%%j)>&3  
)
 rem laeuft das Backup bereits?
(type nul >>%LogFile%)2>nul ||(echo(&echo          Backup ist noch in Arbeit!&(for /f %%i in (' find /v /c "" ^<"%LogFile%" ') do set /a Last=%%i&for /f %%i in (' find /v /c "?" ^<"%LogFile%" ') do echo          ca. %%i Dateien Kopiert.) 2>nul &goto :TimeOutError)  

 REM Kopieren der Backupdateien von "%Quelle%" auf externe Festplatte  
(
echo.
echo.
echo.
echo.         *****************************************************************
echo.         *                                                               *
echo.         *                   Aktualisieren des BACKUPS                   *
echo.         *                                                               *
echo.         *               Laufwerk G --^> Externe Festplatte               * 
echo.         *                                                               *
echo.         *          --- nur veraenderte Daten werden kopiert ---         *
echo.         *                                                               *
echo.         *****************************************************************
echo.
echo.                                 ^(c^) imebro 2012
echo.
)
if defined Abort (
echo.
echo.
if defined BStatus (echo          !!!  %LastBUtime% - Das Backup wurde abgebrochen!   !!!
) else              echo          ***  !!!  Hinweis, letzter Backup-Log- nicht vorhanden!  !!!  ***
echo.
echo.
)
:IsOnline
for %%i in ("%Ziel%") do if not exist %%~di (  
echo.
echo.
echo.         *****************************************************************
echo.         * Zuerst die externe FP anschliessen! - Weiter mit Tastendruck! *
echo.         *****************************************************************
pause > nul
goto :IsOnline
)
echo.
echo.
echo.

CHOICE /C JN /M ".        Kopiervorgang beginnen?"  
if errorlevel 2 goto :eof
del "%LogFile%" 2>nul  
echo(&echo(

 rem -----Monitoring-------Rest vom xcopy eventuell Anpassen--------------------------------------

start "%FTitel%" /min cmd /c " copy "%Quelle%" "%ziel%" /Fridys 1>"%LogFile%" 2>&1"  

 rem -----Ende Monitoring-------------------------------------------------------------------------

:TimeOutError

 rem Marke TimeOutError - 
if not defined TimeOutError set "TimeOutError=20"  
if %TimeOutError% gtr 10 if not exist "%LogFile%" (set/a "TimeOutError-=1") else set "TimeOutError=10"  
%warte%1
if %TimeOutError% gtr 10 goto :TimeOutError
if %TimeOutError% neq 0 (for /f %%i in (' find /v /c "" ^<"%LogFile%" ') do if %%i equ 0 set /a TimeOutError -=1 &goto :TimeOutError)2>nul || (>"%LogFile%" echo LogFile wurde nicht beschrieben. Kopiervorgang konnte nicht gestartet werden!)  
if %last% gtr 3 (set /a "lastMessage=last-3") else set /a "lastMessage=0"  
set "error="  
findstr /r /c:"Syntaxfehler." /c:"Datei .* nicht gefunden" /c:"Datei kann nicht auf sich selbst kopiert werden" /c:"Unzul„ssige Parameteranzahl" /c:"Ungltige Laufwerkangabe" /c:"Kopiervorgang konnte nicht gestartet werden!" /c:"Der Befehl .* ist entweder falsch geschrieben" /c:"konnte nicht gefunden werden." "%LogFile%" >&2  && (  
echo.
echo.         * !!! Das Backup konnte nicht gestartet werden. Fehler!!!*
echo.
echo.
echo.
echo.
set "error=1"  
goto :no
) || (
echo.
echo.
echo.         **************************************
echo.         * Der Kopiervorgang wurde gestartet! *
echo.         **************************************
echo.
)

:Loop2

::echo on
 rem -----
(
for /f "%skip% tokens=1* delims=:" %%i in ('findstr /n "^" "%LogFile%" 2^>nul') do (  
	set /a last=%%i
	set "Inputstream="  
	  rem Logfile
	if %last% lss %%i echo(%%j
))>>"%OrigLog%"   

 rem -----EingabeMeldungen Anzeigen
for /f "tokens=1* delims=:" %%i in ('findstr /n /r /c:"^Ist das Ziel .* ein Dateiname" /c:"^oder ein Verzeichnisname" /c:".*? [^]." "%LogFile%" 2^>nul') do if %lastmessage% lss %%i (  
	set /a lastMessage=%%i
	if not defined Inputstream echo(&echo(Achtung! Eine Eingabe wird erwartet.&echo Best„tige im Fenster "%FTitel%" laut dieser Anfrage:&echo(  
	echo(    %%j
	set /a "x=1"  
	set "Inputstream=goto :Loop2"  
)
%warte%%wait%
if %last% neq 0 set "skip=skip=%last%"  

 rem -----FileToBeCopiedSign-oder-Monitoring Ende----
(type nul >>"%LogFile%")2>nul || (%Inputstream%  
	set /a "x-=1", y=1/x 2>nul || (  
	echo(&set/p"=.        "<nul& set /a "x=ax")  
	set/p"=#"<nul  
	goto :Loop2
)

 rem -----enthaelt der Log die Letzte Zeile?
for /f %%i in ('find /v /c "" ^<"%LogFile%"') do if %%i neq %last% goto :Loop2  

find "Datei(en) kopiert" <"%LogFile%" >nul && (  
REM ---------------------------------------------------------------------------------------------------
echo.
echo.
echo.
echo.         **********************************************************
echo.         * Das Backup auf der ext. Festplatte wurde aktualisiert! *
echo.         **********************************************************
echo.
echo.
echo.
) || (
echo.
echo. 
echo.
echo.
echo.         *** !!!  Das Backup ist nicht vollst„ndig. Fehler  !!! ***
echo.
echo.
echo.
echo.
set "error=1"  
)
:no
find "Datei(en) kopiert" <"%LogFile%"   
if defined error (pause) else %warte%5
:List
if %last% gtr 2 start notepad "%LogFile%"  

Wenn das Ziel ohne Backslash ist und nicht vorhanden, dann erfolgt eine Nachfrage im minimierten Fenster.
zusätzlich gibt es noch den Parameter /i dafür im xCopy

[Edit]
Logschriebs, ErrorTimeOut und Fehleranzeige vervollständigt.
zuletzt 3/2/12-13:42
[/Edit]

Gruß Phil
Mitglied: 37414
37414 01.02.2012 um 10:38:08 Uhr
Goto Top
Hallo Phil,

danke für Deine Mühe... ist ja unfassbar, was Du aus meiner Ursprungs-Batch gemacht hast face-smile

Habe sie soeben mal getestet. Allerdings hier an meinem Büro-PC.
Dazu habe ich die Verzeichnisse so angelegt, wie in Deinen Einstellungen definiert.

Die Batch bricht sofort ab, nachdem die Anzeige "Aktualisieren des BACKUPS - nur veraenderte Daten werden kopiert" erschienen ist.
Ich konnte das nur feststellen, nachdem ich in die Batch testweise ein pause eingefügt hatte, damit sie dort stehen bleibt und ich sehen kann, wo genau das ist.
Komisch ist, dass die Zeile mit "Laufwerk G --> Externe Festplatte" innerhalb der ersten Meldung fehlt...

Nach dem Abbruch wird eine undefinierbare Datei mit dem Namen "Externe" erstellt. Wenn ich diese mit dem Editor öffne, steht dort folgendes:

* Laufwerk G -- Festplatte *

Dabei fällt mir auf, dass das Zeichen ">" von dem Pfeil nach rechts fehlt.
Der Fehler hat sicher damit zu tun, dass genau diese Zeile auch in der ersten Meldung fehlt (wie ich eben ja schon beschrieben habe).

Ich konnte da aber keinen Fehler ermitteln.

Hast Du eine Idee?

Danke und schöne Grüße,
imebro
Mitglied: bastla
bastla 01.02.2012 um 12:16:40 Uhr
Goto Top
Hallo imebro!

Abgesehen davon, dass Dein Fortschrittsbalken keinen Fortschritt im eigentlich Sinn anzeigt, sondern nur für etwas Action sorgt, sollte Dir die Tatsache, dass eine Datei erstellt wurde, schon den richtigen Hinweis gegeben haben; falls doch noch nicht:

> erzeugt in Batch eine Ausgabeumleitung, wenn es nicht "escaped" wird ...
echo.         *               Laufwerk G --^> Externe Festplatte               *
Grüße
bastla
Mitglied: 37414
37414 01.02.2012 um 12:33:45 Uhr
Goto Top
Hallo bastla,

danke für Deinen Tipp.

Merkwürdig ist jedoch, dass diese Zeile in meiner Ursprungsdatei genauso aussah und dennoch funktioniert hat.
Aber ich habe das "^-Zeichen" jetzt dort eingesetzt.

Dennoch bricht die Batch genau an der gleichen Stelle ab... nur wird jetzt keine Datei "Externe" mehr erzeugt...

Weißt Du noch einen Rat?

Danke & Gruss,
imebro
Mitglied: pieh-ejdsch
pieh-ejdsch 01.02.2012 um 20:45:26 Uhr
Goto Top
moin Imebro,

auf Bastlas Hinweis hab ich auch die Klammern vom (c) maskiert.
Bei mir läuft der Batch durch und sämtliche wenn ich alle erwischt habe Meldungen werden Durchgereicht, Auch zu erwartende Eingaben werden Angezeigt (die müssen allerdings im richtigen Fenster eingegeben werden).

Falls bei Dir Fehler Auftreten dann starte den Batch seperat im einer Extra CMD-Box und schalte ein Echo on in die Batch.

Gruß Phil
Mitglied: 37414
37414 01.02.2012 um 22:23:22 Uhr
Goto Top
Hallo Phil,

ganz großen Dank an Dich!!

Die Batch läuft grds. gut durch.

Allerdings wird gleich im ersten Fenster auch die Angabe "Hinweis, letztes Backup wurde abgebrochen" angezeigt.
Da hat sich sicher noch ein kleiner Fehler eingeschlichen...

Weiterhin sieht man auf dem folgenden Bild, dass der Fortschrittsbalken plötzlich in die nächste Zeile wechselt.
Außerdem wird die LOG-Ausgabe direkt in das Ausführungsfenster geschrieben. Lieber wäre es mir, wenn sich einfach am Schluss nur das Logfile öffnet (was ja auch funktioniert). Die zusätzliche Ausgabe im Fenster kann ruhig weg bleiben.

http://www.bilder-hochladen.net/files/j98v-1-c4ca-jpg.html

Vielen Dank bis dahin und schöne Grüße,
imebro
Mitglied: pieh-ejdsch
pieh-ejdsch 02.02.2012 um 00:28:46 Uhr
Goto Top
moin imebro,

Den Hinweis habe ich Korrigiert.
Der Haupt -Log wird weiterhin auch vollgeschrieben (aber nur wenn der Anzeige Batch läuft).
Sonst wird der direkte xcopy Log nur für den Ablauf des Monitoring benutzt.

Den Copy Balken habe ich etwas reingesetzt und Hinten abgeschnitten (Varaible: ax ).

Bei Fehlern pausiert der Batch wie gehabt.
Das öffnen des Log habe ich im Ergebnis unter 3 Zeilen unterbunden.

Gruß Phil
Mitglied: LordXearo
LordXearo 02.02.2012 um 10:22:16 Uhr
Goto Top
Hallo zusammen,

habe das Thema nur überflogen und falls es noch nicht erwähnt wurde.

Powershell bietet einen richtigen Fortschrittsbalken. Vielleicht bietet das für dich einen richtigen Mehrwert, wenn du dich dort einarbeitest.

Gruß

Xearo
Mitglied: 37414
37414 02.02.2012 um 10:58:44 Uhr
Goto Top
Hallo Phil,

danke für die Änderungen.

Werde die Datei heute Abend (schon gespannt...) testen und dann berichten.

Schöne Grüße,
imebro
Mitglied: 37414
37414 02.02.2012 um 22:04:54 Uhr
Goto Top
So... habe eben getestet.

Die Batch läuft gut durch.

Nur bin ich mir nicht sicher, warum nach dem Start als erstes ganz oben die folgende Meldung erscheint:

"Letzte Backup Meldung(en):
5 Datei(en) kopiert"

Soll das so sein oder was hat es damit auf sich?

In jedem Fall mal wieder vielen, vielen Dank an PHIL!! face-wink

Schöne Grüße,
imebro
Mitglied: pieh-ejdsch
pieh-ejdsch 03.02.2012 um 13:51:38 Uhr
Goto Top
moin,

Für ein Backup ist es doch erwähnenswert ob es Erfolgreich war. Finde ich.
Ist doch von Vorteil ob die letzte Backup Meldung ein/kein Fehler war bzw. was der Fehler war.

Schau mal Zeile 15 an.

Gruß Phil
Mitglied: 37414
37414 03.02.2012 um 14:11:25 Uhr
Goto Top
Hallo Phil,

ja, da hast Du Recht!
Hab ich gar nicht drüber nachgedacht.

Also... die Batchdatei funktioniert super und ist genial ausgetüftelt face-smile

Danke Dir für Deine Mühe und wünsche Dir ein super schönes Wochenende.


Schöne Grüße,
imebro