Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Von xcopy nicht gefundene Dateien werden nicht protokolliert

Frage Entwicklung Batch & Shell

Mitglied: phsprenger

phsprenger (Level 1) - Jetzt verbinden

21.05.2014, aktualisiert 23:30 Uhr, 1278 Aufrufe, 4 Kommentare, 2 Danke

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:

01.
@echo off &setlocal 
02.
 
03.
SET "sourceList=Liste.txt" 
04.
SET "logFile=Fehlerprotokoll.txt" 
05.
 
06.
FOR /f "delims=" %%a IN (Quelle.txt) DO (set sourceRoot=%%a) 
07.
ECHO Die Dateien werden aus dem Verzeichnis %sourceRoot% kopiert 
08.
 
09.
FOR /f "delims=" %%b IN (Ziel.txt) DO (set destFolder=%%b) 
10.
ECHO Die Dateien werden in das Verzeichnis %destFolder% kopiert 
11.
 
12.
PAUSE 
13.
 
14.
:: KOMMENTAR: Variante 1 mit xcopy 
15.
FOR /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.pdf"^|findstr /ig:"%sourceList%"') DO (xcopy "%%~i" "%destFolder%\") >> %logFile% 2>&1 
16.
 
17.
:: KOMMENTAR: Variante 2 mit robocopy; in dem Fall ist die oben definierte Variable für das Logfile irrelevant. 
18.
FOR /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.pdf"^|findstr /ig:"%sourceList%"') DO (robocopy /V "%%~i" "%destFolder%\") 
19.
 
Mitglied: Xaero1982
LÖSUNG 21.05.2014, aktualisiert um 23:30 Uhr
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:
01.
 FOR /f "delims=" %%i in ("%sourceList%") DO (xcopy "%sourceRoot%\%%~i" "%destFolder%\") >> %logFile% 2>&1
Gruß
edit: Dein Nick erinnert mich an meinen Ausbilder
Bitte warten ..
Mitglied: bastla
LÖSUNG 21.05.2014, aktualisiert um 23:30 Uhr
Hallo phsprenger und willkommen im Forum!

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"
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):
01.
for /f "usebackq delims=" %%i in ("%sourceList%") do ( 
02.
    set "Gefunden=" 
03.
    for /f "delims=" %%a in ('dir /s/b/a-d "%sourceRoot%\%%i"') do ( 
04.
        set Gefunden=true 
05.
        xcopy "%%a" "%destFolder%\" 2>>"%logFile%" 
06.
07.
    if not defined Gefunden >>"%logFile%" echo "%%i" nicht gefunden 
08.
)
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
Bitte warten ..
Mitglied: phsprenger
21.05.2014 um 23:21 Uhr
Super Hinweis, Danke! So funktionierts.

Hab das letzte Mal zu DOS-Zeiten sehr simple Batch-Dateien geschrieben und mir den Code da oben mehr oder weiger zusammengesucht. Dass die Logik genau verkehrt herum ist ist mir nicht aufgefallen - aber vollkommen einleuchtend, wenn man genau hinguckt. Da meine Dateien aber ja immer brav kopiert wurden(und die NICHT in der Liste stehenden Dateien auch ignoriert wurden) hab ich den Fehler an der Stelle überhaupt nicht gesucht.

Danke für die Hinweise und Hilfe, bastla und Xaero1982 - jetzt klappts auch!!!
Bitte warten ..
Mitglied: Xaero1982
21.05.2014, aktualisiert um 23:39 Uhr
Super, dann noch auf gelöst setzen und Bastla und ich freuen uns auch auf ein Klick wenns zur Lösung beigetragen hat

Gruß
edit: Schön, dass du ihn doch wieder freigegeben hast
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Windows Server
Server sehr langsam bei vielen kleinen Dateien (5)

Frage von MichiBLNN zum Thema Windows Server ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...