805 Aufrufe
Gefragt in Windows 7 von
Hi all,

Habe ein Verständnis-Problem mit dem Ablauf einer *.bat-Datei.

Eigentlich funktioniert alles. Die 8 Quell-Ordner, um die es geht, werden sauber in den Ziel-Ordner auf einem USB-Stick kopiert. Auch bleibt die Robocopy-Shell (DOS-Fenster) aufgrund des Script-Befehls "@pause" am Ende der 8 Kopiervorgänge (zu Kontrollzwecken) geöffnet. Und da beginnt leider das Problem....

Ich sehe in dieser Shell nur die letzten 3 Kopiervorgänge angezeigt. Die anderen 5 Kopiervorgänge werden nicht angezeigt, obwohl sie ordnungsgemäss ausgeführt wurden.

Ist das jetzt normal?? Meine Erwartung wäre, dass man in diesem DOS-Fenster alle 8 Kopiervorgänge sehen müsste. Und nicht nur drei... Kann mir jemand bitte helfen?

Ich kopiere das Batch-Script nachfolgend ein.

Script-Kurzbeschreibung:

8 Quell-Ordner, die sich auf Laufwerken C:\ und E:\ befinden, werden auf das Laufwerk V:\ (USB-Stick) kopiert. Und zwar in das Verzeichnis V:\Backup. Um die Backups unterscheidbar zu machen, wird das aktuelle Tagesdatum als Name des obersten Verzeichnisses verwendet. Der Ziel-Pfad für die 8 kopierten Ordner wäre dann beispielsweise V:\Backup\21.01.2018\


****************Beginn Script*********************

@echo off

set new_folder=%DATE:/=_%
set backup_folder=V:\Backup\%new_folder%

mkdir %backup_folder%

echo ### Backing up "E:\SIKO\Safe\Eigenes\Verschiedenes\Korrespondenz\Verschiedenes\Paperless"
robocopy "E:\SIKO\Safe\Eigenes\Verschiedenes\Korrespondenz\Verschiedenes\Paperless" "%backup_folder%\Paperless" /MIR

echo ### Backing up "E:\SIKO\Safe\Eigenes\Verschiedenes\Korrespondenz\Verschiedenes\Online"
robocopy "E:\SIKO\Safe\Eigenes\Verschiedenes\Korrespondenz\Verschiedenes\Online" "%backup_folder%\Online" /MIR

echo ### Backing up "E:\SIKO\Safe\Eigenes\Verschiedenes\Korrespondenz\Verschiedenes\Versicherung"
robocopy "E:\SIKO\Safe\Eigenes\Verschiedenes\Korrespondenz\Verschiedenes\Versicherung" "%backup_folder%\Versicherung" /MIR

echo ### Backing up "E:\SIKO\Safe\Eigenes\Reisen\Ferien_2017"
robocopy "E:\SIKO\Safe\Eigenes\Reisen\Ferien_2017" "%backup_folder%\Ferien_2017" /MIR

echo ### Backing up "E:\SIKO\Safe\Eigenes\Reisen\Ferien_2018"
robocopy "E:\SIKO\Safe\Eigenes\Reisen\Ferien_2018" "%backup_folder%\Ferien_2018" /MIR

echo ### Backing up "E:\SIKO\Safe\Favoriten\Bookmarks"
robocopy "E:\SIKO\Safe\Favoriten\Bookmarks" "%backup_folder%\Bookmarks" /MIR

echo ### Backing up "E:\SIKO\Safe\Mappe1"
robocopy "E:\SIKO\Safe\Mappe1" "%backup_folder%\Mappe1" /MIR

echo ### Backing up "C:\Users\Goofy\AppData\Local\Microsoft\Outlook"
robocopy "C:\Users\Goofy\AppData\Local\Microsoft\Outlook" "%backup_folder%\Outlook" /MIR

echo Backup Complete!

@pause


**********Ende Script**********************

8 Antworten

0 Punkte
Beantwortet von
Google sagt, dass die DOS-Box auf 300 Zeilen begrenzt ist. Wäre zu ändern auf max. 9999 Zeilen. Somit geklärt.

Könnte mir jemand dabei helfen, wie ich eine Log-Datei (*.txt) über die erfolgten Kopiervorgänge ins jeweilige Zielverzeichnis V:\Backup\21.01.2018\ gespeichert bekomme?

(Die Ausgabe in der DOS-Box ist ja nur flüchtig, solange das Fenster geöffnet bleibt. Eine dauerhafte Log-Datei wäre mir lieber.)

Ich weiss leider nicht, wie das im Script einzurichten ist.

Vielen Dank, Oc34nz
0 Punkte
Beantwortet von
0 Punkte
Beantwortet von flupo Profi (17.8k Punkte)
Leite einfach die Ausgaben des robocopy-Befehls in eine Datei um.
Dazu hängst du an jede zu loggende Zeile eine Ausgabeumleitung an.

Beispiel:
[code]robocopy "C:\Users\Goofy\AppData\Local\Microsoft\Outlook"
"%backup_folder%\Outlook" /MIR >>%backup_folder%\log.txt[/code]


Zum Trennen der Abschnitte lassen sich per echo ------ >>log.txt Trennzeilen
mit beliebigem Text einfügen.

Gruß Flupo
0 Punkte
Beantwortet von
Danke!

Es gibt offenbar viele Syntaxen für mein Ziel. Und für jemand, der hier nicht weiss, was er tut, bleibt nur geduldiges probieren.

Habe jetzt gesehen, es steht für die Ausgabe in eine Datei auch eine "Sammelmethode" zur Wahl, die dann (beispielhaft mit 2 Kopier-Durchgängen) so aussehen kann:

(
echo ### Backing up "E:\SIKO\Safe\Mappe1"
robocopy "E:\SIKO\Safe\Mappe1" "%backup_folder%\Mappe1" /MIR

echo ### Backing up "C:\Users\Goofy\AppData\Local\Microsoft\Outlook"
robocopy "C:\Users\Goofy\AppData\Local\Microsoft\Outlook" "%backup_folder%\Outlook" /MIR
echo.
)>>%backup_folder%\log.txt 2>&1

Gruss Oc34nz
0 Punkte
Beantwortet von flupo Profi (17.8k Punkte)
Ist eigentlich ganz einfach:
Befehle (wie z.B. Robocopy) produzieren Bildschirmausgaben, die man mit einer Pipe > oder >> in eine Datei umleiten kann.

Mit einem > wird die danach stehende Zieldatei neu angelegt. Ist schon eine Datei mit gleichem Namen da, wird diese überschrieben.

Nimmst du zwei >>, wird die Ausgabe an den Inhalt einer bestehenden Datei angefügt.

Gruß Flupo
0 Punkte
Beantwortet von
Danke!

Bin froh, mit einer Batch-Datei ganz einfach wichtige Backups fahren zu können, die besser nicht auf die nächste Daten-Vollsicherung, in ungewisser Zukunft, warten sollten.

Auf die Batch-Methode bin ich erst kürzlich und zufällig gestossen.

PCs können, auf lange Sicht gesehen, nur eines absolut sicher: Per Ereignis Daten vernichten. Datenvorhaltung ist nur temporär. Wer jemals betroffen war, macht Backups :-)

Gruss Oc34nz
0 Punkte
Beantwortet von
mit der o.g. /log option von Robocopy selbst würde sowas halt in etwa so aussehen

[code]robocopy "E:\SIKO\Safe\Eigenes\Verschiedenes\Korrespondenz\Verschiedenes\Online" "%backup_folder%\Online" /MIR /log:V:\Backup\21.01.2018\Online.log[/code]
hängst du noch /tee an, gibt es die Ausgabe sowohl in der Konsole als auch ins Log-File
[code]robocopy "E:\SIKO\Safe\Eigenes\Verschiedenes\Korrespondenz\Verschiedenes\Online" "%backup_folder%\Online" /MIR /tee /log:V:\Backup\21.01.2018\Online.log[/code]
0 Punkte
Beantwortet von deathfun Mitglied (177 Punkte)
Hi,

ich arbeite auch sehr viel mit Robocopy und empfehle dir ausdrücklich [b]KEIN[/b] >> Log.txt.

Ganz ehrlich, wenn du nicht nur 10 Dateien Kopiert ist dein Log schon nach einem Kopiervorgang Tausende Zeilen lang, wer möchte sich da schon
durchwühlen nur um vielleicht ein Problem zu finden? Ich werte immer nur den ErrorLevel aus, Robocopy ist hier sehr dankbar, ein ErrorLevel kleiner 7 ist ein
Erfolgreicher Vorgang, erst über 7 gab es Probleme (Datei Schreibgeschützt, Geöffnet, etc.)

Also einfach eine Auswertung nach jedem Copy-Befehl und du hast alles nötige, ich mache es immer so:
[code]IF %ERRORLEVEL% GTR 7 pause[/code]

Das Skript pausiert wenn ein Kopiervorgang ein Problem hatte und du sieht genau in der Konsole wo. Wenn alles gut geht läuft es einfach durch.



Gruß
D
...