Ich kann einfach keine Möglichkeit finden, in der Befehlszeile zu sagen: "Kopieren Sie alle Dateien von Verzeichnis A nach Verzeichnis B, aber wenn die Datei bereits in Verzeichnis B vorhanden ist, überschreiben Sie sie nicht, unabhängig davon, welche Datei neuer ist." und fordere mich nicht auf. "
Ich habe Kopieren, Verschieben, Kopieren und Robokopieren durchlaufen, und das Beste, was ich bekommen kann, ist, dass Sie Robokopieren "Kopie A nach B kopieren, aber neuere Dateien nicht mit älteren Dateien überschreiben" mitteilen können, aber das funktioniert bei mir nicht . Ich habe mir xxcopy angesehen, es aber verworfen, da ich keine Abhängigkeit von Drittanbietern von einem Visual Studio-Post-Build-Ereignis haben möchte, bei dem andere SVN-Benutzer dieses Tool installieren müssen, um den Build durchzuführen.
Ich möchte dem Post-Build-Ereignis in Visual Studio 2010 eine Befehlszeile hinzufügen, damit die Dateien, die aus den T4- Vorlagen für neue EF- Modellobjekte generiert werden, an die Projektordner verteilt werden, zu denen sie gehören, aber Dateien für vorhandene Objekte neu generiert Überschreiben Sie möglicherweise nicht bearbeitete Zieldateien nicht.
Da die T4-Vorlage neu generiert wird, ist die Quelldatei immer neuer und ich kann den "neueren" Schalter nicht zuverlässig verwenden, glaube ich nicht.
Ich verwende Teilklassen für die Elemente, für die ich kann, aber es gibt andere Dinge, die ich generiere, die keine Teilklassen verwenden können (z. B. Generieren einer Standard-EditorTemplate- oder DisplayTemplate * .ascx-Datei).
Hat jemand ähnliche Probleme, die er gelöst hat?
quelle
cmd.exe
‚s -for
Befehl? Wenn nicht, empfehle ich Ihnen, das auszuführenfor /?
und zu verwenden.Antworten:
quelle
~nx
in%~nxF
meinen genau?~nxF
der VariablenF
ein Dateiname und eine Erweiterung wird.Zur Ausarbeitung (unter Verwendung der Antworten von Hydrargyrum, HailGallaxar und Andy Schmidt):
/E
Robocopy kopiert rekursiv Unterverzeichnisse, einschließlich leerer./XC
schließt vorhandene Dateien mit demselben Zeitstempel, aber unterschiedlichen Dateigrößen aus. Robocopy überschreibt diese normalerweise./XN
schließt vorhandene Dateien aus, die neuer als die Kopie im Zielverzeichnis sind. Robocopy überschreibt diese normalerweise./XO
schließt vorhandene Dateien aus, die älter als die Kopie im Zielverzeichnis sind. Robocopy überschreibt diese normalerweise.Ohne die Klassen "Geändert", "Älter" und "Neuer" macht Robocopy genau das, was das Originalposter will - ohne dass eine Skriptumgebung geladen werden muss.
Referenzen: Technet , Wikipedia
Download von: Microsoft Download Link (Link zuletzt überprüft am 30. März 2016)
quelle
/e
? Was ist, wenn Sie/s
stattdessen verwenden? Ich möchte keine leeren Unterordner.Die Lösung von Belisarius ist gut.
Um auf diese etwas knappe Antwort einzugehen:
/E
Robocopy kopiert rekursiv Unterverzeichnisse, einschließlich leerer./XC
schließt vorhandene Dateien mit demselben Zeitstempel, aber unterschiedlichen Dateigrößen aus. Robocopy überschreibt diese normalerweise./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.Ohne die Klassen "Geändert", "Älter" und "Neuer" macht Robocopy genau das, was das Originalposter will - ohne dass eine Skriptumgebung geladen werden muss.
quelle
Sie können dies versuchen:
-y
Vor dem Überschreiben werden einfach Eingabeaufforderungen angezeigt, und wir können alle diese Fragen beantworten. Dies würde also im Wesentlichen nur nicht vorhandene Dateien kopieren. :) :)quelle
copy /-y
nur automatisch anzunehmen, dass Nein, sobald stdin keine Eingabe mehr hat. Sie können die erste explizite weglassenn
oder< nul
in sie einleiten , und das Gleiche passiert.Hier ist es in Batch-Datei-Form:
quelle
Ich möchte nur etwas aus meinen eigenen Tests klären.
@ Hydrargyrum schrieb:
Das ist eigentlich rückwärts. XN bedeutet „Ausschließen Neuere“ Dateien , aber es schließt Dateien , die in dem als die Kopie neuer sind Zielverzeichnis. XO führt "Älteres ausschließen" aus, schließt jedoch Dateien aus, die älter als die Kopie im Ziel sind Zielverzeichnis.
Natürlich machen Sie wie immer Ihre eigenen Tests.
quelle
Es gibt eine seltsame Möglichkeit, dies mit xcopy zu tun:
Fügen Sie einfach so viele n wie Dateien ein, die Sie kopieren, und es werden n auf alle Fragen zum Überschreiben beantwortet.
quelle
copy
sehen, diese Antwort , speziell @mwfearnley Kommentar:copy /-y
automatisch übernimmt ,n
wenn stdin erschöpft ist, so dass Sie zB könnenecho n
nur einmal und es funktioniert immer noch./ XX: eXclude "eXtra" -Dateien und -Verzeichnisse (im Ziel vorhanden, aber nicht in der Quelle). Dadurch werden Löschungen vom Ziel verhindert. (Dies ist die Standardeinstellung)
quelle
Robocopy kann hier für Systeme heruntergeladen werden, auf denen es noch nicht installiert ist. (Dh Windows Server 2003.)
http://www.microsoft.com/download/en/details.aspx?displaylang=de&id=17657 (für die Installation ist kein Neustart erforderlich)
Denken Sie daran, Ihren Weg zur Robocopy-Exe festzulegen. Klicken Sie dazu mit der rechten Maustaste auf "Arbeitsplatz"> Eigenschaften> Erweitert> "Umgebungsvariablen", suchen Sie die Pfadsystemvariable und fügen Sie diese am Ende hinzu: "; C: \ Programme \ Windows Resource Kits \ Tools" oder wo immer Sie möchten installiert es. Stellen Sie sicher, dass Sie die bereits vorhandenen Pfadvariablenzeichenfolgen belassen, und fügen Sie einfach den zusätzlichen Pfad hinzu.
Sobald der Pfad festgelegt ist, können Sie den von belisarius vorgeschlagenen Befehl ausführen. Es funktioniert großartig.
quelle
Ich kann die falschen Nachrichten nicht direkt kommentieren, sondern nur alle warnen, dass die Definition der Optionen / XN und / XO im Vergleich zu den in vorherigen Nachrichten veröffentlichten Definitionen umgekehrt ist.
Die Option "Ältere / neuere Dateien ausschließen" stimmt mit den Informationen überein, die in der RoboCopy-Protokollierung angezeigt werden: RoboCopy durchläuft die QUELLE und meldet dann, ob jede Datei in der QUELLE "ÄLTER" oder "NEUER" als die Datei im Ziel ist.
Folglich schließt / XO OLDER SOURCE-Dateien aus (was intuitiv ist), die nicht "älter als die Quelle" sind, wie hier behauptet wurde.
Wenn Sie nur neue oder geänderte Quelldateien kopieren möchten, aber nicht neuere Zieldateien ersetzen möchten, ist / XO die richtige Option.
quelle
Ein einfacher Ansatz wäre die Verwendung der Option / MIR, um die beiden Verzeichnisse zu spiegeln. Grundsätzlich werden nur die neuen Dateien zum Ziel kopiert. Im nächsten Befehl ersetzen Sie Quelle und Ziel durch die Pfade zu Ihren Ordnern. Das Skript sucht nach Dateien mit beliebigen Erweiterungen.
quelle
Das hat bei mir funktioniert. Ich benutze dies, um Dateien zum anderen Laufwerk hinzuzufügen, ohne sie zu überschreiben.
Batch-Datei: robocopy-missingfiles.bat
Beispiel:
Testen Sie vor der Implementierung.
quelle