Mit Xcopy NUR nicht vorhandene Dateien kopieren
Mit Boardmitteln sprich XCOPY in einer Batch nur "NICHT VORHANDENE" Dateien in ein Verzeichnis kopieren!
Hallo Leute,
ich als alter Batchfanatiker und "Verfechter immer zur Verfügung stehender Befehle" (also OHNE ROBOCOPY) benötige eine Batch welche NUR nicht vorhandene Dateien in ein Verzeichnis kopiert.
Beispielereignis:
Verzeichnis Daten auf einem Server gelöscht und mit Recoverytool nur unvollständig in ein Testverzeichnis wieder hergestellt. Datensicherung ist etwas älter und wird ersteinmal wieder an die ursprüngliche Position kopiert. Nun sollen nur nicht vorhandene Dateien aus dem wiederhergestellten Verzeichnis in das neue "alte" Datenverzeichnis kopiert werden.
On Top wäre eine optionale Funktion für das Ausklammern von Null-grossen Dateien - die defekten bzw. nur schlecht restaurierten Dateien halt.
So könnte man sicherstellen nur voll funktionsfähige alte Dateien im Datenordner zu haben und nur die rel. intakten NEUEN (nicht vorhandenen) Dateien kopiert zu haben. Deswegen nützt mir der Schalter -D nicht so viel.
Vielen Dank im voraus für Eure Hilfe. Biber, ich erwarte, wie immer, godlike-Leistungen
CU der Onkel Olli
Hallo Leute,
ich als alter Batchfanatiker und "Verfechter immer zur Verfügung stehender Befehle" (also OHNE ROBOCOPY) benötige eine Batch welche NUR nicht vorhandene Dateien in ein Verzeichnis kopiert.
Beispielereignis:
Verzeichnis Daten auf einem Server gelöscht und mit Recoverytool nur unvollständig in ein Testverzeichnis wieder hergestellt. Datensicherung ist etwas älter und wird ersteinmal wieder an die ursprüngliche Position kopiert. Nun sollen nur nicht vorhandene Dateien aus dem wiederhergestellten Verzeichnis in das neue "alte" Datenverzeichnis kopiert werden.
On Top wäre eine optionale Funktion für das Ausklammern von Null-grossen Dateien - die defekten bzw. nur schlecht restaurierten Dateien halt.
So könnte man sicherstellen nur voll funktionsfähige alte Dateien im Datenordner zu haben und nur die rel. intakten NEUEN (nicht vorhandenen) Dateien kopiert zu haben. Deswegen nützt mir der Schalter -D nicht so viel.
Vielen Dank im voraus für Eure Hilfe. Biber, ich erwarte, wie immer, godlike-Leistungen
CU der Onkel Olli
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 19933
Url: https://administrator.de/contentid/19933
Ausgedruckt am: 25.11.2024 um 15:11 Uhr
13 Kommentare
Neuester Kommentar
Moin Tee-Onkel,
ich würde das "Problem" eigentlich trennen.
Diese 0-Byte-Dateien würde ich einmalig löschen. Wenn ich dich richtig verstanden habe, kannst Du mit denen ja eh nie wieder etwas anfangen.
Alle 0-Byte-Dateien vom CMD-Prompt aus ansehen oder löschen geht ja fix:
(anschauen) FOR /R startverzeichnis %f in (*.*) do @if %~zf equ 0 @echo %~ftzf
(löschen) FOR /R startverzeichnis %f in (*.*) do @if %~zf equ 0 @del %~ff
Zwischen "anschauen" und "löschen" kann natürlich noch eine Entscheidungsphase liegen. Denn nicht alle 0-Byte-Dateien sind "unsinnig"- manche sind ja nur als "Flag-Dateien" gedacht und sollen gar keinen Inhalt haben.
Deshalb ist hier kein Batch sinnvoll, sondern eben die zwei CMD-Zeilen.
Anyway, back to thread - Du wolltest ja alles in einer Batch haben. Ich nenne die Quell- und Zielverzeichnisse mal q:\quell und z:\ziel.
Hint: ich gebe dem XCopy hier auch Parameter ( /h /r ) mit für "versteckte/Schreibgeschütze" etc. Ggf. ändern.
Mimik:
(0.te Zeile ist die "@echo off..." die zähl ich nicht mit)
In der 1. Zeile werden alle Dateien, die auch schon im Zielverzeichnis existieren, in eine Datei geschrieben.
In der 2. Zeile werden alle 0-Byte-Dateien an diese Datei angehängt.
in der 3. Zeile wird tatsächlich etwas getan.
Thats all.
HTH
Biber
ich würde das "Problem" eigentlich trennen.
Diese 0-Byte-Dateien würde ich einmalig löschen. Wenn ich dich richtig verstanden habe, kannst Du mit denen ja eh nie wieder etwas anfangen.
Alle 0-Byte-Dateien vom CMD-Prompt aus ansehen oder löschen geht ja fix:
(anschauen) FOR /R startverzeichnis %f in (*.*) do @if %~zf equ 0 @echo %~ftzf
(löschen) FOR /R startverzeichnis %f in (*.*) do @if %~zf equ 0 @del %~ff
Zwischen "anschauen" und "löschen" kann natürlich noch eine Entscheidungsphase liegen. Denn nicht alle 0-Byte-Dateien sind "unsinnig"- manche sind ja nur als "Flag-Dateien" gedacht und sollen gar keinen Inhalt haben.
Deshalb ist hier kein Batch sinnvoll, sondern eben die zwei CMD-Zeilen.
Anyway, back to thread - Du wolltest ja alles in einer Batch haben. Ich nenne die Quell- und Zielverzeichnisse mal q:\quell und z:\ziel.
Hint: ich gebe dem XCopy hier auch Parameter ( /h /r ) mit für "versteckte/Schreibgeschütze" etc. Ggf. ändern.
::------ snipp T-OnkelsRestore.bat
@echo off & setlocal & set "XCopyParms=/y /h /r /i /e"
xcopy q:\quell z:\ziel /u /l %XCopyParms% >"%temp%\Exclude.txt"
FOR /R q:\quell %%f in (*.*) do if %%~zf equ 0 ECHO %%~ff >>"%temp%\Exclude.txt"
REM gestrichen ---xcopy q:\quell z:\ziel %XcopyParms% /exclude:"%temp%\Exclude.txt"
REM gestrichen --- siehe Beiträge/Bugmeldung unten
xcopy q:\quell z:\ziel %XcopyParms% /exclude:%temp%\Exclude.txt
::------ snapp T-OnkelsRestore.bat
(0.te Zeile ist die "@echo off..." die zähl ich nicht mit)
In der 1. Zeile werden alle Dateien, die auch schon im Zielverzeichnis existieren, in eine Datei geschrieben.
In der 2. Zeile werden alle 0-Byte-Dateien an diese Datei angehängt.
in der 3. Zeile wird tatsächlich etwas getan.
Thats all.
HTH
Biber
Moin, Olli,
schön Dich zu lesen... hab schon befürchtet, Du hättest doch lieber eine Umschulung zum Pizzabäcker begonnen, weil Dir das zu viele Bätch-Zeilen waren..
Okay, ist mit furchtbar peinlich, aber oben in der zweiten echten Zeile habe ich wieder ein paar %-Zeichen vergessen (ich habs naturlich wieder nur am Prompt "getestet" und danach aus eigentlich allen "%" -Zeichen ein "%%" gemacht... dachte ich)...
Falsch:
FOR /R q:\quell %f in (*.*) do if %~zf equ 0 ECHO %%~ff >>"%temp%\Exclude.txt"
Richtiger im Batch:
FOR /R q:\quell %%f in (*.*) do if %%~zf equ 0 ECHO %%~ff >>"%temp%\Exclude.txt"
Ich verbessere es oben!!
Kann sein, dass noch irgendwelche 0-Byte-Dateien mit Leerzeichen durchs Raster fallen, weil die in Anführungszeichen gesetzt werden müssen (also "%%~ff") .. den Fall hab ich vernachlässigt. Kommt eher selten vor..
Nun sollte es durchlaufen (wie gesagt, habs oben berichtigt!).
Grüße Biber
schön Dich zu lesen... hab schon befürchtet, Du hättest doch lieber eine Umschulung zum Pizzabäcker begonnen, weil Dir das zu viele Bätch-Zeilen waren..
Okay, ist mit furchtbar peinlich, aber oben in der zweiten echten Zeile habe ich wieder ein paar %-Zeichen vergessen (ich habs naturlich wieder nur am Prompt "getestet" und danach aus eigentlich allen "%" -Zeichen ein "%%" gemacht... dachte ich)...
Falsch:
FOR /R q:\quell %f in (*.*) do if %~zf equ 0 ECHO %%~ff >>"%temp%\Exclude.txt"
Richtiger im Batch:
FOR /R q:\quell %%f in (*.*) do if %%~zf equ 0 ECHO %%~ff >>"%temp%\Exclude.txt"
Ich verbessere es oben!!
Kann sein, dass noch irgendwelche 0-Byte-Dateien mit Leerzeichen durchs Raster fallen, weil die in Anführungszeichen gesetzt werden müssen (also "%%~ff") .. den Fall hab ich vernachlässigt. Kommt eher selten vor..
Nun sollte es durchlaufen (wie gesagt, habs oben berichtigt!).
Grüße Biber
Sorry, Olli,
mea culpa, mea culpa...
Hat mir neulich schon der User hammel geschrieben: Wer lesen kann, ist klar im Vorteil. Hätte ich drauf hören sollen...
Ich war zu vorsichtig wegen eventueller Leerzeichen im %temp%-Path und habe deshalb die Datei nach dem "/exclude"-Parameter in Anführungszeichen gesetzt. Das nimmt Xcopy übel, wenn Pfad und Dateiname keine Leerzeichen enthalten.
also bitte nochmal ändern:
REM Bullshit xcopy q:\quell z:\ziel %XcopyParms% /exclude:"%temp%\Exclude.txt"
xcopy q:\quell z:\ziel %XcopyParms% /exclude:%temp%\Exclude.txt
[Edit] Bugfix oben im Batch nachgezogen [/Edit]
bzw.
xcopy q:\quell z:\ziel %XcopyParms% /exclude:c:\test5\Exclude.txt
Ich versuche mich zu bessern... demnächst fange ich an, meine Schnipsel zu testen...
P.S. Dass man/frau bei diesem Parameter überhaupt eine Datei mit einer Liste von Dateien übergeben kann, ist im höchsten Maße undokumentiert.
Aus der "XCopy /?"-Hilfe:
Also berufe Dich nicht auf mich und erzähl es um Himmels Willen nicht weiter.
Schönes Wochenende
Biber
mea culpa, mea culpa...
Hat mir neulich schon der User hammel geschrieben: Wer lesen kann, ist klar im Vorteil. Hätte ich drauf hören sollen...
Ich war zu vorsichtig wegen eventueller Leerzeichen im %temp%-Path und habe deshalb die Datei nach dem "/exclude"-Parameter in Anführungszeichen gesetzt. Das nimmt Xcopy übel, wenn Pfad und Dateiname keine Leerzeichen enthalten.
also bitte nochmal ändern:
REM Bullshit xcopy q:\quell z:\ziel %XcopyParms% /exclude:"%temp%\Exclude.txt"
xcopy q:\quell z:\ziel %XcopyParms% /exclude:%temp%\Exclude.txt
[Edit] Bugfix oben im Batch nachgezogen [/Edit]
bzw.
xcopy q:\quell z:\ziel %XcopyParms% /exclude:c:\test5\Exclude.txt
Ich versuche mich zu bessern... demnächst fange ich an, meine Schnipsel zu testen...
P.S. Dass man/frau bei diesem Parameter überhaupt eine Datei mit einer Liste von Dateien übergeben kann, ist im höchsten Maße undokumentiert.
Aus der "XCopy /?"-Hilfe:
....
/EXCLUDE:Datei1[+Datei2][+Datei3]...
Gibt eine Liste von Zeichenfolgen an. Wenn eine der
Zeichenfolgen Teil des absoluten Verzeichnispfads
der zu kopierenden Datei ist, wird diese Datei vom
Kopiervorgang ausgeschlossen. Beispiel: Bei der
Zeichenfolge \obj\ oder .obj werden alle Dateien
unterhalb des Verzeichnisses OBJ bzw. alle Dateien mit
der Erweiterung .obj vom Kopiervorgang ausgeschlossen.
.....
Schönes Wochenende
Biber
Na Gottseidank, Tee-Onkel,
endlich haben wir die Kuh vom Eis... *drei-Kreuze-mach**
Gruß zurück an die Tipp-Datenbank - wenn die wollen, tipp ich das auch noch mal in sauber ab und schreib ein paar Kommentare dazu. Sonst setz wenigstens noch folgende Zeile rein, falls Rückfragen kommen:
:: Biberware -- Placed in the Public Domain 2005 -- biber3@hotmail.de
Schönes Rest-Wochenende
Frank / der Biber aus Bremen
endlich haben wir die Kuh vom Eis... *drei-Kreuze-mach**
Gruß zurück an die Tipp-Datenbank - wenn die wollen, tipp ich das auch noch mal in sauber ab und schreib ein paar Kommentare dazu. Sonst setz wenigstens noch folgende Zeile rein, falls Rückfragen kommen:
:: Biberware -- Placed in the Public Domain 2005 -- biber3@hotmail.de
Schönes Rest-Wochenende
Frank / der Biber aus Bremen
Moin-moin,
auch wenn schon etwas Zeit vergangen ist, anbei die Lösung für alle weiteren, die wie ich übrigens auch, nach der Lösung für "mit xcopy nur "nicht vorhandene" Dateien kopieren wollen.
Dein Problem läßt sich mit der Option /d:M-T-J lösen.
Die Option /d kopiert nur die an oder nach einem Datum geänderten Dateien.
Ist kein Datum angegeben, werden nur Dateien kopiert, die neuer als die bestehenden Zieldateien sind. Also: Falls alle Dateien bereits vorhanden sind, werden keine Dateien kopiert.
War das hilfreich ? Mir hat genau diese Funktion bei meinem Problem geholfen...
LG xhs-computerman
auch wenn schon etwas Zeit vergangen ist, anbei die Lösung für alle weiteren, die wie ich übrigens auch, nach der Lösung für "mit xcopy nur "nicht vorhandene" Dateien kopieren wollen.
Dein Problem läßt sich mit der Option /d:M-T-J lösen.
Die Option /d kopiert nur die an oder nach einem Datum geänderten Dateien.
Ist kein Datum angegeben, werden nur Dateien kopiert, die neuer als die bestehenden Zieldateien sind. Also: Falls alle Dateien bereits vorhanden sind, werden keine Dateien kopiert.
War das hilfreich ? Mir hat genau diese Funktion bei meinem Problem geholfen...
LG xhs-computerman
Moin, xhs-computerman,
willkommen im Forum.
Natürlich hast Du Recht mit dem XCopy-Parameter /D, den theUncle ja auch in seiner Eröffnungsfrage erwähnt.
Das Problem in seinem Fall war ja, dass durchaus aktuellere Dateien in der Quelle (der nur teilweise defekten restaurierten Vollsicherung) vorliegen können - neueres Datum, aber ohne Inhalt. Da nützt der /D-Parameter ausnahmsweise nichts, sondern schadet eher.
Für diesen Spezialfall war dieser merkwürdige Workaround.
Grüße
Biber
willkommen im Forum.
Natürlich hast Du Recht mit dem XCopy-Parameter /D, den theUncle ja auch in seiner Eröffnungsfrage erwähnt.
Das Problem in seinem Fall war ja, dass durchaus aktuellere Dateien in der Quelle (der nur teilweise defekten restaurierten Vollsicherung) vorliegen können - neueres Datum, aber ohne Inhalt. Da nützt der /D-Parameter ausnahmsweise nichts, sondern schadet eher.
Für diesen Spezialfall war dieser merkwürdige Workaround.
Grüße
Biber