Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Von xcopy nicht gefundene Dateien werden nicht protokolliert

Mitglied: phsprenger

phsprenger (Level 1) - Jetzt verbinden

21.05.2014, aktualisiert 23:30 Uhr, 1350 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 ..
Ähnliche Inhalte
Batch & Shell
Xcopy jedoch nur die Dateien die nicht älter
gelöst Frage von zeroblue2005Batch & Shell13 Kommentare

Hallo Zusammen, Wie kann ich diese Script anpassen, so dass aus der Quelle nur die Dateien kopiert werden, die ...

Batch & Shell
Xcopy Batch-Datei
gelöst Frage von LauchheimerBatch & Shell3 Kommentare

Tag Leute, Ich habe in einer Batchdatei einen xcopy-Befehl. Dieser soll eine bestimmte Datei kopieren. Diesen führe ich mit ...

Batch & Shell
Nach xcopy feststellen, ob Datei kopiert wurde oder nicht
gelöst Frage von Scar61Batch & Shell9 Kommentare

Hallo zusammen, in einem Skript wird eine Datei nur dann kopiert, wenn sie in der Quelle neuer ist als ...

Batch & Shell
Xcopy-script kopiert nur 1 datei?
gelöst Frage von f0rml0sBatch & Shell2 Kommentare

hey ich versuche gerade mit einem script dateien von einem unc pfad zum anderen zu kopierenleider kopiert das script ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 3 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 3 TagenSicherheit12 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...

Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall9 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...