Stapelweises Kopieren und Verschieben von Dateien ohne Überschreiben

Stapelweises Kopieren und Verschieben von Dateien ohne Überschreiben

Ich versuche, eine Batchdatei zu erstellen (die im Hintergrund ausgeführt wird), die eine einzelne Datei kopiert, ohne eine Datei mit demselben Namen im Ziel zu überschreiben, und die Datei dann verschiebt, wobei sie auch hier nicht überschrieben wird, wenn sich im Ziel eine Datei mit demselben Namen befindet.

Ich verwende dies im Moment, aber es überschreibt.

copy %1 dest
move %1 dest

Antwort1

Bitte versuchen Sie dies. Es funktioniert für eine einzelne Datei.

echo N | copy /-Y Datei1 Datei2

echo N | move /-Y Datei1 Datei2

Interessanterweise scheint es auch mit Platzhaltern zu funktionieren. Ich habe das auf x64 Windows 7 getestet.

Antwort2

Mir ist nicht klar, was Sie mit dem Verschieben derselben Datei meinen, die gerade kopiert wurde, aber um zu testen, ob eine Datei existiert, verwenden Sie eine „IF“-Anweisung in einem Batch-Skript wie dem folgenden. (Ich erkläre %~ weiter unten ausführlicher.)

IF EXIST %~dp2%~nx1 (echo file exists) ELSE (
robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV>>testing.txt)

Folgendes funktioniert unter Windows 7, Windows 8, Windows Server 2008, Windows Server 2008 R2 und Windows Server 2012.

(Für XP müssen Sie es aus dem Ressourcenkit holen, aber oh nein, der Edelstein hat nur noch 30 Tage Lebensdauer :))

Der folgende Code kopiert eine Datei nur dann vom Quellverzeichnis in das Zielverzeichnis, wenn die Zieldatei nicht existiert.

robocopy source_path dest_path filename /XN /XO

Durch Hinzufügen von /MOV wird die Datei verschoben.

Wenn Sie Parameter verwenden möchten, würde der Befehl etwa so aussehen:

copyscript.bat C:\Dir1\filename.ext D:\path2\

Mit copyscript.bat sieht es ungefähr so ​​aus:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO

Wenn Sie die Ausgabe an ein Protokoll senden möchten, fügen Sie >>logfile.txt wie folgt hinzu:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO>>logfile.txt 

Wenn Sie die Datei verschieben statt kopieren möchten, gehen Sie wie folgt vor:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV 
  • %~dp1 entspricht Verzeichnis und Pfad des 1. Parameters
  • %~dp2 entspricht Verzeichnis und Pfad des 2. Parameters
  • %~nx1 entspricht dem Dateinamen und der Erweiterung des 1. Parameters
  • /XN schließt neuere Dateien beim Kopieren aus
  • /XO schließt ältere Dateien beim Kopieren aus
  • /MOV Verschiebt die Datei, anstatt sie nur zu kopieren
  • hängt die Ausgabeergebnisse an eine Datei an, anstatt an das Befehlsfenster (verwenden Sie nur eine >, wenn Sie das Protokoll jedes Mal überschreiben möchten)

  • Standardmäßig überschreibt Robocopy die Datei nicht, wenn die Datums- und Zeitstempel gleich sind.

Die Site von Simon Sheppard ist eine gute Ressource für Batch-Skripte. Die Syntax für Argumente finden Sie hier. http://ss64.com/nt/syntax-args.html

Informationen zu Microsofts Robocopy finden Sie hierhttp://technet.microsoft.com/en-us/library/cc733145.aspx

verwandte Informationen