Von xcopy nicht gefundene Dateien werden nicht protokolliert
Hallo,
mit einem kleinen Batch-Programm versuche ich, eine Liste von Dateien, die in einer TXT-Datei stehen, von A nach B zu kopieren. A und B sind beliebige Verzeichnisse, die man im Vorfeld eingibt oder in einer gesonderten Textdatei speichert. Dieses Problem ist auch an sich gelöst, der Kopiervorgang funktioniert.
Ich will nun auch ein Protokoll in eine Textdatei schreiben, in der für jeden Kopiervorgang festgehalten wird, ob er erfolgreich oder nicht erfolgreich war.
In meinem Testlauf stehen in der Liste 5 zu kopierende Dateien, im angesteuerten Verzeichnis liegen aber nur 3 dieser 5 Dateien (sowie drei andere, die nicht in der Kopierliste stehen).
Wie gewünscht werden die 3 gefundenen Dateien kopiert, die 3 nicht relevanten Dateien ignoriert, die 2 fehlenden Dateien sollen nun eigentlich im Fehlerprotokoll auftauchen ("Datei xy nicht gefunden").
Für die 3 gefundenen Dateien wird im "Fehlerprotokoll" der Erfolg des Kopiervorgangs protokolliert (wäre eigentlich gar nicht nötig, mir würden auch nur die Fehlermeldungen genügen). Die zwei nicht gefundenen Dateien aber tauchen im Protokoll nicht auf!
Ich habe es mit robocoy und xcopy als Kopierbefehl versucht, um vielleicht zu verstehen, was das Problem ist - aber der Effekt ist bei beiden Befehlen der gleiche: das Batchprogramm protokolliert nur die erfolgreichen Kopiervorgänge, nicht die fehlgeschlagenen.
Ich hab verschiedene Lösungsvorschläge aus diesem und anderen Foren ausprobiert, alle ohne Ergebnis. Ich vermute mittlerweile, dass eine nicht gefundene Datei nicht als "Fehler" ausgegeben wird, sondern einfach übersprungen wird. Dafür spricht, dass auch auf dem Bildschirm keine Fehlermeldungen angezeigt werden. Erst wenn ich den Befehl manuell in die Konsole eingebe und eine einzelne Datei kopieren will, die es nicht gibt, wird mir ein Fehler angezeigt.
Wär schön, wenn jemand das Problem erkennt und mir helfen kann - danke sehr!
Zum besseren Verständnis mein Batchprogramm:
mit einem kleinen Batch-Programm versuche ich, eine Liste von Dateien, die in einer TXT-Datei stehen, von A nach B zu kopieren. A und B sind beliebige Verzeichnisse, die man im Vorfeld eingibt oder in einer gesonderten Textdatei speichert. Dieses Problem ist auch an sich gelöst, der Kopiervorgang funktioniert.
Ich will nun auch ein Protokoll in eine Textdatei schreiben, in der für jeden Kopiervorgang festgehalten wird, ob er erfolgreich oder nicht erfolgreich war.
In meinem Testlauf stehen in der Liste 5 zu kopierende Dateien, im angesteuerten Verzeichnis liegen aber nur 3 dieser 5 Dateien (sowie drei andere, die nicht in der Kopierliste stehen).
Wie gewünscht werden die 3 gefundenen Dateien kopiert, die 3 nicht relevanten Dateien ignoriert, die 2 fehlenden Dateien sollen nun eigentlich im Fehlerprotokoll auftauchen ("Datei xy nicht gefunden").
Für die 3 gefundenen Dateien wird im "Fehlerprotokoll" der Erfolg des Kopiervorgangs protokolliert (wäre eigentlich gar nicht nötig, mir würden auch nur die Fehlermeldungen genügen). Die zwei nicht gefundenen Dateien aber tauchen im Protokoll nicht auf!
Ich habe es mit robocoy und xcopy als Kopierbefehl versucht, um vielleicht zu verstehen, was das Problem ist - aber der Effekt ist bei beiden Befehlen der gleiche: das Batchprogramm protokolliert nur die erfolgreichen Kopiervorgänge, nicht die fehlgeschlagenen.
Ich hab verschiedene Lösungsvorschläge aus diesem und anderen Foren ausprobiert, alle ohne Ergebnis. Ich vermute mittlerweile, dass eine nicht gefundene Datei nicht als "Fehler" ausgegeben wird, sondern einfach übersprungen wird. Dafür spricht, dass auch auf dem Bildschirm keine Fehlermeldungen angezeigt werden. Erst wenn ich den Befehl manuell in die Konsole eingebe und eine einzelne Datei kopieren will, die es nicht gibt, wird mir ein Fehler angezeigt.
Wär schön, wenn jemand das Problem erkennt und mir helfen kann - danke sehr!
Zum besseren Verständnis mein Batchprogramm:
@echo off &setlocal
SET "sourceList=Liste.txt"
SET "logFile=Fehlerprotokoll.txt"
FOR /f "delims=" %%a IN (Quelle.txt) DO (set sourceRoot=%%a)
ECHO Die Dateien werden aus dem Verzeichnis %sourceRoot% kopiert
FOR /f "delims=" %%b IN (Ziel.txt) DO (set destFolder=%%b)
ECHO Die Dateien werden in das Verzeichnis %destFolder% kopiert
PAUSE
:: KOMMENTAR: Variante 1 mit xcopy
FOR /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.pdf"^|findstr /ig:"%sourceList%"') DO (xcopy "%%~i" "%destFolder%\") >> %logFile% 2>&1
:: KOMMENTAR: Variante 2 mit robocopy; in dem Fall ist die oben definierte Variable für das Logfile irrelevant.
FOR /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.pdf"^|findstr /ig:"%sourceList%"') DO (robocopy /V "%%~i" "%destFolder%\")
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 238806
Url: https://administrator.de/forum/von-xcopy-nicht-gefundene-dateien-werden-nicht-protokolliert-238806.html
Ausgedruckt am: 03.04.2025 um 22:04 Uhr
4 Kommentare
Neuester Kommentar
Nabend,
benutze bitte Codetags: <"code"> <"/code"> ohne "".
Mir ist nicht ganz klar was du da machst...
Du durchsuchst das Quellverzeichnis nach pdf Dateien und diese müssen dann in der besagten "Liste.txt" sein.
Das hat aber zur Folge, dass du nie eine Fehlermeldung bekommen wirst, weil er nur nach Dateien sucht, die tatsächlich auch im Quellverzeichnis vorhanden sind.
Beispiel:
Er durchsucht den Ordner: dir /a-d /b /s "%sourceRoot%\*.pdf
und findet:
1.pdf
2.pdf
3.pdf
In der Liste steht:
1.pdf
2.pdf
3.pdf
4.pdf
5.pdf
Nun guckt er: 1-3.pdf sind alle in der Liste und im Quellordner -> Kopier ich!
Nach 4-5.pdf sucht er gar nicht in der Liste, weil diese nicht im Ordner sind. Ergo: Keine Fehlermeldung.
Du willst ja nur die Dateien kopieren die in der Liste stehen?
Also:
Gruß
edit: Dein Nick erinnert mich an meinen Ausbilder
benutze bitte Codetags: <"code"> <"/code"> ohne "".
Mir ist nicht ganz klar was du da machst...
Du durchsuchst das Quellverzeichnis nach pdf Dateien und diese müssen dann in der besagten "Liste.txt" sein.
Das hat aber zur Folge, dass du nie eine Fehlermeldung bekommen wirst, weil er nur nach Dateien sucht, die tatsächlich auch im Quellverzeichnis vorhanden sind.
Beispiel:
Er durchsucht den Ordner: dir /a-d /b /s "%sourceRoot%\*.pdf
und findet:
1.pdf
2.pdf
3.pdf
In der Liste steht:
1.pdf
2.pdf
3.pdf
4.pdf
5.pdf
Nun guckt er: 1-3.pdf sind alle in der Liste und im Quellordner -> Kopier ich!
Nach 4-5.pdf sucht er gar nicht in der Liste, weil diese nicht im Ordner sind. Ergo: Keine Fehlermeldung.
Du willst ja nur die Dateien kopieren die in der Liste stehen?
Also:
FOR /f "delims=" %%i in ("%sourceList%") DO (xcopy "%sourceRoot%\%%~i" "%destFolder%\") >> %logFile% 2>&1
Gruß
edit: Dein Nick erinnert mich an meinen Ausbilder
Hallo phsprenger und willkommen im Forum!
Deine Interpretation
liefert ja schließlich nur "gefundene" Dateien, und erst das anschließende Filtern legt fest, ob die Datei auch kopiert werden soll.
Wenn Du alle Dateien aus "Liste.txt" kopieren bzw deren Fehlen feststellen willst, musst Du eher so vorgehen (ungetestet):
Falls übrigens "Liste.txt" nur Dateinamen, nicht aber auch den Typ (.pdf) enthalten sollte, wäre entsprechend "%sourceRoot%\%%i.pdf" zu verwenden ...
Grüße
bastla
Deine Interpretation
Ich vermute mittlerweile, dass eine nicht gefundene Datei nicht als "Fehler" ausgegeben wird, sondern einfach übersprungen wird.
ist völlig zutreffend -dir /a-d /b /s "%sourceRoot%\*.pdf"
Wenn Du alle Dateien aus "Liste.txt" kopieren bzw deren Fehlen feststellen willst, musst Du eher so vorgehen (ungetestet):
for /f "usebackq delims=" %%i in ("%sourceList%") do (
set "Gefunden="
for /f "delims=" %%a in ('dir /s/b/a-d "%sourceRoot%\%%i"') do (
set Gefunden=true
xcopy "%%a" "%destFolder%\" 2>>"%logFile%"
)
if not defined Gefunden >>"%logFile%" echo "%%i" nicht gefunden
)
Grüße
bastla