Frage Kopieren Sie Dateien ohne zu überschreiben


Ich finde einfach keinen Weg in der Befehlszeile zu sagen "kopiere alle Dateien von Verzeichnis A in Verzeichnis B, aber wenn die Datei bereits in Verzeichnis B existiert, überschreibe sie nicht, egal welche Datei neuer ist und bitte mich nicht. "

Ich habe durch kopieren, verschieben, xcopy & robocopy, und das nächste was ich bekommen kann ist, dass Sie robocopy sagen können "Kopieren Sie A nach B, aber überschreiben Sie nicht neuere Dateien mit älteren Dateien", aber das funktioniert nicht für mich . Ich habe xxcopy betrachtet, aber verworfen, da ich keine Abhängigkeit von einem Visual Studio-Postbuild-Ereignis von Drittanbietern haben möchte, das andere SVN-Benutzer dazu zwingen würde, dieses Tool zu installieren, um den Build zu erstellen.

Ich möchte dem Post-Build-Ereignis in Visual Studio 2010 eine Befehlszeile hinzufügen, damit die Dateien, die aus dem generiert werden T4 Vorlagen für neue EF Modellobjekte werden an die Projektordner verteilt, zu denen sie gehören. Neu erstellte Dateien für vorhandene Objekte überschreiben jedoch potenziell bearbeitete Zieldateien nicht.

Da die T4-Vorlage neu generiert wird, ist die Quelldatei immer neuer und ich kann den "neueren" Switch nicht zuverlässig verwenden, denke ich nicht.

Ich verwende partielle Klassen für die Elemente, für die ich kann, aber es gibt andere Dinge, die ich erzeugen kann, die keine partiellen Klassen verwenden können (z. B. das Generieren einer Standard-EditorTemplate- oder DisplayTemplate * .ascx-Datei).

Hat jemand ähnliche Probleme, die sie gelöst haben?


75
2017-11-19 19:50


Ursprung


Antworten:


For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"

31
2017-11-19 20:04



Robocopy, oder "Robuste Dateikopie" ist ein Befehlszeilenverzeichnis-Replikationsbefehl. Es wurde als Teil des Windows Resource Kit ab Windows NT 4.0 verfügbar und wurde als Standardfunktion von Windows Vista, Windows 7 und Windows Server 2008 eingeführt. 

   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

Um zu erarbeiten (mit Hydrargyrum, HailGallaxar und Andy Schmidt Antworten):

  • /E macht Robocopy rekursiv Unterverzeichnisse zu kopieren, einschließlich leerer.
  • /XC schließt vorhandene Dateien mit aus derselbe Zeitstempel, aber anders Dateigrößen. Robocopy überschreibt diese normalerweise.
  • /XN schließt vorhandene Dateien neuer aus als die Kopie im Ziel Verzeichnis. Robocopy normalerweise überschreibt diese.
  • /XO schließt aus vorhandene Dateien älter als die Kopie im Ziel Verzeichnis. Robocopy normalerweise überschreibt diese.

Wenn die Klassen "Changed", "Older" und "Newer" ausgeschlossen werden, führt Robocopy genau das aus, was das ursprüngliche Poster wünscht - ohne dass eine Skriptumgebung geladen werden muss.

Verweise: Technet, Wikipedia
Herunterladen von: Microsoft Download-Link  (Link zuletzt überprüft am 30.03.2016)


159
2017-11-19 20:05



Belisarius 'Lösung ist gut.

Um diese etwas knappe Antwort näher auszuführen:

  • /E macht Robocopy rekursiv Unterverzeichnisse zu kopieren, einschließlich leerer.
  • /XC schließt vorhandene Dateien mit aus derselbe Zeitstempel, aber anders Dateigrößen. Robocopy überschreibt diese normalerweise.
  • /XN schließt vorhandene Dateien neuer aus als die Kopie in der Quelle Verzeichnis. Robocopy normalerweise überschreibt diese.
  • /XO schließt aus vorhandene Dateien älter als die Kopie in der Quelle Verzeichnis. Robocopy normalerweise überschreibt diese.

Wenn die Klassen "Changed", "Older" und "Newer" ausgeschlossen werden, führt Robocopy genau das aus, was das ursprüngliche Poster wünscht - ohne dass eine Skriptumgebung geladen werden muss.


41
2017-12-06 08:17



Sie können dies versuchen:

echo n | copy /-y <SOURCE> <DESTINATION>

-y fragt einfach vor dem Überschreiben und wir können all diese Fragen anhängen. Dies würde im Wesentlichen nur nicht vorhandene Dateien kopieren. :)


32
2018-05-22 16:14



Hier ist es in Batch-Dateiform:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"

5
2017-11-19 20:06



Ich möchte nur etwas aus meinen eigenen Tests klären.

@Hydrargyrum schrieb:

  • / XN schließt vorhandene Dateien aus, die neuer als die Kopie im Quellverzeichnis sind. Robocopy überschreibt diese normalerweise.
  • / XO schließt vorhandene Dateien aus, die älter als die Kopie im Quellverzeichnis sind. Robocopy überschreibt diese normalerweise.

Das ist eigentlich rückwärts. XN schließt "eXclude Newer" -Dateien aus, schließt jedoch Dateien aus, die neuer als die Kopie in der Ziel Verzeichnis. XO "eXclude Older", aber es schließt Dateien aus, die älter sind als die Kopie in der Ziel Verzeichnis.

Natürlich teste deine eigenen Tests wie immer.


2
2018-04-16 12:40



Es gibt einen seltsamen Weg, dies mit xcopy zu tun:

echo nnnnnnnnnnn | xcopy /-y source target

Nehmen Sie einfach so viele n wie die zu kopierenden Dateien auf und beantworten Sie alle Überschreibfragen.


2
2018-03-23 18:19



robocopy src dst /MIR /XX

/ XX: eXclude "eXtra" Dateien und Verzeichnisse (im Ziel vorhanden, aber nicht als Quelle). Dadurch werden Löschvorgänge vom Ziel verhindert. (Dies ist die Standardeinstellung)


2
2018-02-12 16:13