manuel1985
Goto Top

Batchbefehle werden nicht vollständig ausgeführt

Hallo Leute,

ich möchte mittels Batch einen Ordner von einem Server auf ein NAS kopieren.
Dazu habe ich folgende Batchdatei geschrieben:

@echo off
net use x: /delete
net use x: \\IP-Adresse\sicherung\Unterordner
robocopy "D:\Test" "X:\" /mir /LOG:"D:\Backup.txt" /np
D:\Scripts\blat324\full\blat.exe -to adresse1@empfaenger1.de; adresse1@empfaenger2.de -f adresse2@empfaenger2.de -server mailserver.domain.local:25 -s "Backup" -body "Anbei das Logfile der letzten Sicherung" -attacht "D:\Backup.txt"

Leider wird der Robocopy-Befehl und der Mailversand nicht ausgeführt.
Kann mir jemand sagen, warum?

Dank euch im Voraus.

Gruß Manuel

Content-ID: 273019

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

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

Snowman25
Snowman25 27.05.2015 um 13:44:45 Uhr
Goto Top
Hallo @manuel1985,

Schmeiß Echo off raus und überprüfe nach jedem Befehl den Errorlevel.
u.U. musst du robocopy ein bisschen Zeit geben. Wird davor noch ein ping localhost -n 2 >nul. Das wartet 2 Sekunden.

Gruß,
@Snowman25
potshock
potshock 27.05.2015 um 13:54:43 Uhr
Goto Top
Hi Manuel,

zumindest einen Fehler habe ich gefunden:
Im Gegensatz zu copy oder xcopy werden die Enden der Pfade nicht mit einem Backslash also "\" abgeschlossen. Also teste mal:
robocopy "D:\Test" "X:" /mir /LOG:"D:\Backup.txt" /np

Potshock
manuel1985
manuel1985 27.05.2015 um 14:27:17 Uhr
Goto Top
Also der Errorlevel gibt immer 0 aus, also alles gut.

D:\Scripts>robocopy "D:\Test" "X:" /mir /LOG:"D:\Backup.txt" /np ist die letzte Zeile. Ab hier kann ich warten, bis ich grün werde, nix passiert.
Zur Info: im Test-Ordner liegt ein Putty, der Copy-Job sollte also ruck-zuck erledigt sein. Allerdings taucht im Taskmanager auch kein Robocopy-Prozess auf...
Pago159
Pago159 27.05.2015 aktualisiert um 15:18:50 Uhr
Goto Top
Hallo manuel1985,

also in meinen kurzen Tests habe ich festgestellt, dass die Logdate (wird im Profil gespeichert) nicht in jeden beliebigen Pfad (Pfadangaben bringen eine Fehlermeldung) geschrieben werden kann.


Wenn du echo OFF aus deinem Skript nimmst, dann kannst du auch sehen, was passiert.
manuel1985
manuel1985 27.05.2015 um 16:05:38 Uhr
Goto Top
echo off ist bereits entfernt, den Logpfad habe ich geändert. Brachte bisher keine Änderung, alles wie beschrieben.
Ach so: das Script wird in einer CMD als Administrator ausgeführt, an irgendwelchen Berechtigungen sollte es also nicht liegen.
Pago159
Pago159 27.05.2015 um 16:34:04 Uhr
Goto Top
Versuch mal /LOG:Log.txt dann sollte die Log-Datei direkt in dein Profilordner geschrieben werden.

Oder Poste mal die Ausgabe des Scriptes.

Lg Pago
Snowman25
Snowman25 27.05.2015 um 16:34:33 Uhr
Goto Top
Na was ist denn dann das Output des Batch-Files?
Kommt zumindest der Header von Robocopy?
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robustes Dateikopieren für Windows
-------------------------------------------------------------------------------
Oder erscheint selbst das nicht? Ist X wirklich zugreiffbar?
u.U. solltest du auch zwischen net use X: /D und net use X: einen 2-sekündigen Schlaf setzen, wie vorhin beschrieben.

Gruß,
@Snowman25
114757
114757 27.05.2015 aktualisiert um 18:03:25 Uhr
Goto Top
Moin,
also als erstes mal den Parameter /np weglassen damit der Status angezeigt wird. Und wenn du die Robocopy-Parameter /R für die Anzahl an Wiederholungen nicht angibst versucht Robocopy 1 Million mal den Vorgang auszuführen (mit Pause von 30 Sekunden zwischen den Wiederholungen) wenn es Probleme beim Kopieren gibt, und scheint dann für dich zu hängen wenn du die Ausgabe mit /np unterdrückst. Zusätzlich solltest du die Wartezeit für die Wiederholung mit dem Parameter W reduzieren.
/R:n :: Anzahl von Wiederholungsversuchen bei fehlerhaften Kopiervorgängen. Der Standardwert ist 1 Million.
/W:n :: Wartezeit zwischen Wiederholungsversuchen. Der Standardwert ist 30 Sekunden.
Und wie gesagt wurde, eine kurze Pause vor dem Robocopy-Befehl einsetzen:
Also beispielsweise folgende Befehle nach dem mappen:
timeout /t 1
robocopy "D:\Test" "X:" * /mir /LOG:"D:\Backup.txt" /R:5 /W:5  
Welches OS und Robocopy-Version werden verwendet ?

Gruß jodel32
manuel1985
manuel1985 28.05.2015 um 08:53:29 Uhr
Goto Top
Also, noch mal von vorn.

OS: Server 2008 R2 Std.
Script aktuell wie folgt:

net use x: /delete
echo %ERRORLEVEL%
ping localhost -n 2 >nul
echo %ERRORLEVEL%
net use x: \\IP-Adresse\sicherung\NAS-Compra-taeglich
echo %ERRORLEVEL%
ping localhost -n 2 >nul
echo %ERRORLEVEL%
robocopy "D:\Test" "X:" /mir /LOG:"D:\Test1\Compra-Backup.txt" /np
echo %ERRORLEVEL%

Ausgabe aktuell wie folgt:

PS D:\Backup_Compra_Scripts> & '.\Robocopy - Kopie.bat'

D:\Backup_Compra_Scripts>net use x: /delete
Die Netzwerkverbindung konnte nicht gefunden werden.

Sie erhalten weitere Hilfe, wenn Sie NET HELPMSG 2250 eingeben.


D:\Backup_Compra_Scripts>echo 2
2

D:\Backup_Compra_Scripts>ping localhost -n 2 1>nul

D:\Backup_Compra_Scripts>echo 0


D:\Backup_Compra_Scripts>net use x: \\IP-Adresse\sicherung\NAS-Compra-taeglich
Der Befehl wurde erfolgreich ausgeführt.


D:\Backup_Compra_Scripts>echo 0


D:\Backup_Compra_Scripts>ping localhost -n 2 1>nul

D:\Backup_Compra_Scripts>echo 0


D:\Backup_Compra_Scripts>robocopy "D:\Test" "X:" /mir /LOG:"D:\Test1\Compra-Backup.txt" /np


Im Taskmanager taucht jedoch kein robocopy.exe-Prozess auf, es wird auch nichts kopiert. Auf X: ist nach dem mounten auch zugreifbar.
114757
114757 28.05.2015 aktualisiert um 09:11:56 Uhr
Goto Top
Lass das Script doch mal in einer normalen CMD und nicht in einer Powershell-Konsole ausführen. Und bau den Befehl mal so auf wie ich oben geschrieben habe.
juergensteffe
juergensteffe 28.05.2015 um 14:42:41 Uhr
Goto Top
Hallo,

liegt die robocopy.exe auch in einem Verzeichnis, das im Path enthalten ist ?
Ansonsten mal in den gleichen Ordner kopieren, wo die Batch-Datei liegt.
114757
114757 28.05.2015 aktualisiert um 15:02:34 Uhr
Goto Top
Zitat von @juergensteffe:

liegt die robocopy.exe auch in einem Verzeichnis, das im Path enthalten ist ?
Ansonsten mal in den gleichen Ordner kopieren, wo die Batch-Datei liegt.
Dann müsste er aber eigentlich sofort meckern ...Datei oder Programm nicht gefunden

Ich schätze das es mit der Ausführung in der Powershell-Konsole zu tun hat.
Snowman25
Snowman25 28.05.2015 aktualisiert um 16:22:32 Uhr
Goto Top
Gut möglich, dass Robocopy auf eine Art und Weise auf das Terminal schreibt, mit dem die PowerShell nicht zurechtkommt oder erst den Output anzeigt, wenn das Programm fertig abgelaufen ist.
Das könnte auch erklären, warum kein Robocopy-Prozess auftaucht: Weil dieser "anonym" unter dem Powershell-Prozess läuft.
Pago159
Pago159 29.05.2015 um 08:17:26 Uhr
Goto Top
Erscheint denn die Hilfe zu Robocopy, wenn du in der Console "robocopy /?" eingibst?
hast du mal getestet, Dateien mit Robocopy ohne Batch zu kopieren?
Wenn ja, wie war das Ergebnis?
Wenn nicht, erstell doch einfach mal zwei Testordner, wobei du einen mit Testdaten füllst und den zweiten leer lässt.
Anschließend gehst du hin un Kopierst die Testdaten in den zweiten Ordner. evtl. auch mal die Batch mit höheren Rechten ausführen.