Frage

Ich kann einfach nicht scheinen, einen Weg auf der Kommandozeile zu finden alle Dateien aus dem Verzeichnis A bis Verzeichnis B zu sagen „kopieren, aber wenn die Datei existiert bereits im Verzeichnis B, tue es nicht überschrieben werden soll, unabhängig davon, welche Datei neue und nicht prompt mich. "

Ich habe durch Kopie, gewesen bewegen, xcopy & Robocopy und die nächste, die ich bekommen kann, ist, dass Sie Robocopy sagen kann „kopieren A nach B, aber nicht überschreiben neuere Dateien mit älteren Dateien,“ aber das bedeutet nicht arbeite für mich. Ich sah xxcopy, aber verworfen es, wie ich will nicht eine Drittanbieter-Abhängigkeit von einem Visual Studio Post-Build-Ereignisse haben, die anderen SVN Benutzer benötigen dieses Werkzeug, um den Build zu tun installiert sein.

Ich mag eine Befehlszeile auf das Post-Build-Ereignis in Visual Studio 2010, so dass die Dateien hinzufügen, die von dem T4 Vorlagen für neue EF Modellobjekte auf die get verteilt Projektordner zu dem sie gehören, aber regenerierten Dateien für vorhandene Objekte nicht überschreiben möglicherweise Zieldateien bearbeitet werden.

Da die T4-Vorlage Regenerate, die Quelldatei ist immer neuere, und ich kann nicht die „neueren“ Schalter zuverlässig verwenden, ich glaube nicht.

Ich benutze partielle Klassen für diese Elemente, für die ich kann, aber es gibt andere Dinge, die ich erzeugen, dass keine Teilklassen verwenden kann (zum Beispiel einer Erzeugung von Standard EditorTemplate oder DisplayTemplate * ASCX-Datei).

Jeder irgendwelche ähnliche Probleme, die sie gelöst haben?

War es hilfreich?

Lösung

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

Andere Tipps

  

Robocopy , oder "Robust File Copy" ist ein Befehlszeilenverzeichnisreplikation Befehl. Es wird im Rahmen des Windows Resource Kit ab Windows NT 4.0, verfügbar und wurde als Standard-Feature von Windows Vista, Windows 7 und Windows Server 2008.

eingeführt
   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

Um dies näher auszuführen (mit Hydrargyrum, HailGallaxar und Andy Schmidt Antworten):

  • /E macht Robocopy rekursiv kopieren Verzeichnisse, auch leere.
  • /XC umfasst nicht vorhandene Dateien mit der gleiche Zeitstempel, aber anders Dateigrößen. Robocopy überschreibt normalerweise diejenigen.
  • /XN umfasst nicht vorhandene Dateien neueren als die Kopie im Ziel Verzeichnis. Robocopy normalerweise jene überschreibt.
  • /XO schließt vorhandene Dateien, die älter als die Kopie im Ziel Verzeichnis. Robocopy normalerweise Überschreibungen diejenigen.

Mit den veränderten, Ältere und Neuere Klassen ausgeschlossen, Robocopy tut genau das, was das ursprüngliche Plakat will -., Ohne dass eine Scripting-Umgebung laden

Referenzen: Technet , Wikipedia
Download: Microsoft Download Link (Link zuletzt überprüft am 30. März 2016)

Belisars Lösung ist gut.

Um näher auf die etwas knappe Antwort:

  • /E macht Robocopy rekursiv kopieren Verzeichnisse, auch leere.
  • /XC umfasst nicht vorhandene Dateien mit der gleiche Zeitstempel, aber anders Dateigrößen. Robocopy überschreibt normalerweise diejenigen.
  • /XN umfasst nicht vorhandene Dateien neueren als die Kopie in der Quelle Verzeichnis. Robocopy normalerweise jene überschreibt.
  • /XO schließt vorhandene Dateien, die älter als die Kopie in der Quelle Verzeichnis. Robocopy normalerweise Überschreibungen diejenigen.

Mit den veränderten, Ältere und Neuere Klassen ausgeschlossen, Robocopy tut genau das, was das ursprüngliche Plakat will -., Ohne dass eine Scripting-Umgebung laden

Sie können versuchen, diese:

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

-y einfach Anweisungen vor dem Überschreiben und wir können Rohr n auf all diese Fragen. So würde dies im Wesentlichen nur kopieren Sie nicht vorhandene Dateien. :)

Hier ist es in Batch-Datei Form:

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

Ich mag nur etwas von meinen eigenen Tests klären.

@Hydrargyrum schrieb:

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

Dies ist eigentlich rückwärts. XN bedeutet „Ausschließen Neuere“ Dateien, aber es schließt Dateien, die neuer als die Kopie in dem Ziel Verzeichnis. XO bedeutet „Ausschließen Ältere“, aber es schließt Dateien, die in der älter ist als die Kopie sind Ziel Verzeichnis.

Natürlich tun Sie Ihre eigenen Tests wie immer.

Es ist eine seltsame Art und Weise dies mit xcopy zu tun:

echo nnnnnnnnnnn | xcopy /-y source target

sind einfach so viele n die als Dateien Sie kopieren, und es wird antworten n zu all den Überschreibungs Fragen.

robocopy src dst /MIR /XX

/ XX: exclude "eXtra" Dateien und Verzeichnisse (in Ziel aber nicht Quelle). Dadurch werden alle Streichungen aus dem Ziel zu verhindern. (Dies ist die Standardeinstellung)

Robocopy kann hier für Systeme heruntergeladen werden, wo es noch nicht installiert ist. (Das heißt Windows Server 2003)

http://www.microsoft.com/download/ en / details.aspx? displaylang = en & id = 17657 (Kein Neustart für Installation erforderlich)

Denken Sie daran, Ihren Weg auf die Robocopy exe einzustellen. Sie tun dies durch einen Rechtsklick auf „Arbeitsplatz“> Eigenschaften> Erweitert> „Umgebungsvariablen“, dann den Pfad Systemvariablen finden und diese bis zum Ende hinzufügen: „; C: \ Programme \ Windows Resource Kits \ Tools“ oder wo immer Sie installiert es. Achten Sie auf den Pfad-Variable Strings zu verlassen, die schon da sind und nur Anfügen des addtional Weg.

, wenn der Pfad eingestellt ist, können Sie den Befehl ausführen, dass belisarius vermuten lässt. Es funktioniert großartig.

Es wird mich nicht direkt auf die fehlerhaften Meldungen lassen Kommentar -. Aber lassen Sie mich nur alle warnen, dass die Definition der / XN und / XO Optionen Vertauschen Vergleich zu dem, was in früheren Beiträge geschrieben wurde

Das Ausschließen Ältere / Neuere Dateien Option im Einklang mit den Informationen in RoboCopy der Protokollierung angezeigt: RoboCopy wird durch die Quelle durchlaufen und dann berichten, ob jede Datei in der Quelle „Older“ oder „neuer“ als die Datei im Ziel.

Folglich / XO wird äLTERE SOURCE Dateien ausschließen (das intuitiven ist), nicht „älter als die Quelle“, wie hier behauptet worden war.

Wenn Sie nur neue oder geänderte Quelldateien kopieren möchten, aber vermeiden Sie neuere Zieldateien zu ersetzen, dann / XO ist die richtige Option zu verwenden.

Ein einfacher Ansatz wäre, die / MIR-Option zu verwenden, die beiden Verzeichnisse zu spiegeln. Grundsätzlich wird es kopiert nur die neuen Dateien zum Ziel. In nächstem comand ersetzen Quelle und das Ziel mit den Pfaden auf Ihre Ordner, wird das Skript für jede Datei mit allen möglichen Erweiterungen suchen.

robocopy <source directory> <destination directory> *.* /MIR

Dies ist, was für mich gearbeitet hat. Ich benutze diese, um Dateien auf die andere Laufwerk „add“, ohne Überschreibungen.

Batch-Datei: Robocopy-missingfiles.bat

@echo off
echo Copying 
echo      "%1"
echo   to "%2"
echo.
echo Press Cntr+C to abort
Pause
echo.
@echo on
robocopy %1 %2 /Xo /XN /XC /J /SL /S /MT:8 /R:1 /W:1 /V /DCOPY:DAT /ETA /COPY:DATO /FFT /A-:SH /XD $RECYCLE.BIN "System Volume Information"

Beispiel:

robocopy-missingfiles.bat f:\Working-folder\ E:\Backup-folder\

Do-Test vor der Umsetzung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top