Batch-Datei zum Kopieren von Dateien von einem Ordner in einen anderen Ordner


235

Ich habe einen Speicherordner in einem Netzwerk, in dem alle Benutzer ihre aktiven Daten auf einem Server speichern. Jetzt wird dieser Server aufgrund eines Platzierungsproblems durch einen neuen ersetzt, sodass ich Unterordnerdateien aus dem alten Serverspeicherordner in den neuen Serverspeicherordner kopieren muss. Ich habe unten ex:

von \ Oldeserver \ storage \ data & files nach \ New server \ storage \ data & files.


3
Ich nehme an, Sie sprechen von einer Windows-Umgebung?
Alan Plum


4
@ HugoM.Zuleta, mir sind .bat-Dateien bekannt. "Batch-Datei" garantiert jedoch nicht unbedingt eine Windows-Umgebung. Die Verwendung des Begriffs datiert vor Windows (wie auch .bat-Dateien), und ich habe sogar gesehen, dass Anfänger den Begriff "Shell-Skripte" in * nix-Umgebungen verwenden.
Alan Plum

1
@pluma Ich stimme zu, und dies liegt hauptsächlich daran, dass sie sich auf Stapeloperationen beziehen, die von den Skript-Tools ihres Betriebssystems ausgeführt werden.
Hugo M. Zuleta

Antworten:


441

xcopy.exe ist definitiv dein Freund hier. Es ist in Windows integriert, daher sind seine Kosten nichts.

Gerade xcopy /s c:\source d:\target

Sie möchten wahrscheinlich ein paar Dinge optimieren; Zu den Optionen, die wir auch hinzufügen, gehören:

  • /s/e - rekursives Kopieren, einschließlich Kopieren leerer Verzeichnisse.
  • /v- Fügen Sie dies hinzu, um die Kopie mit dem Original zu vergleichen. langsamer, aber für die Paranoiden.
  • /h - System und versteckte Dateien kopieren.
  • /k- Kopieren Sie schreibgeschützte Attribute zusammen mit Dateien. Andernfalls werden alle Dateien schreibgeschützt.
  • /x- Wenn Sie sich für Berechtigungen interessieren, möchten Sie vielleicht /ooder /x.
  • /y - Nicht auffordern, bevor vorhandene Dateien überschrieben werden.
  • /z- Wenn Sie der Meinung sind, dass die Kopie fehlschlagen könnte und Sie sie neu starten möchten, verwenden Sie diese Option. Beim Kopieren wird auf jede Datei eine Markierung gesetzt, sodass Sie den Befehl xcopy erneut ausführen können, um dort fortzufahren, wo er aufgehört hat.

Wenn Sie der Meinung sind, dass die xcopy teilweise fehlschlägt (z. B. beim Kopieren über eine flockige Netzwerkverbindung) oder wenn Sie sie stoppen müssen und später fortsetzen möchten, können Sie sie verwenden xcopy /s/z c:\source d:\target.

Hoffe das hilft.


2
@Iavinio Beim Kopieren eines Archivs werden Dateien oder Verzeichnisse abgefragt. Gibt es eine Möglichkeit, das zu unterdrücken?
Bitterblue

Hi @ mini-me - Ich habe festgestellt, dass Sie in einem Verzeichnis ein nachfolgendes '/' Zeichen angeben können und diese Meldung nicht angezeigt wird.
DaveDev

2
/i- Wenn das Ziel nicht vorhanden ist und mehr als eine Datei kopiert wird, wird davon ausgegangen, dass das Ziel ein Verzeichnis sein muss.
Lavinio

1
Wie kopiere ich eine einzelne Datei aus dem Verzeichnis?
Charan Raju CR

10
Um die Eingabeaufforderung "Datei oder Verzeichnis" zu umgehen, führen Sie den folgenden Befehl aus ... echo f | xcopy /s /f srcfile destfile
wintondeshong

56

Mein Favorit zum Sichern von Daten ist:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

Ich bin für den Spiegel. Sie können auch / mov verwenden, um Dateien zu verschieben. Es reproduziert genau den gleichen Ordner. Es kann Dateien nach Bedarf löschen / überschreiben. Funktioniert super für mich. Es ist schneller als xcopy / copy. Es ist auch in Windows gebaut.

Quelle: http://technet.microsoft.com/en-us/library/cc733145.aspx


2
Ich unterstütze das. Es ist sehr schnell. viel schneller als xcopy
Ike

Gibt es eine ähnliche Möglichkeit, thumbs.db rekursiv zu entfernen?
Drooh

54

xcopy /s c:\source d:\targetUm ganz klar zu sein , setzen Sie bei der Verwendung "" um c: \ source und d: \ target, da sonst eine Fehlermeldung angezeigt wird.

dh wenn der Pfad Leerzeichen enthält, dh wenn Sie Folgendes haben:

"C:\Some Folder\*.txt"

aber nicht erforderlich, wenn Sie:

C:\SomeFolder\*.txt

1
Die Anführungszeichen machten den Trick;) Danke, ich habe auch / Y verwendet, um die Datei zu ersetzen, falls vorhanden :) Beispiel: ´´´xcopy / s "c: \ source" "d: \ target" / Y```
Joel Carneiro

18

Vielleicht möchten Sie sich XCopy oder RoboCopy ansehen, die ziemlich umfassende Lösungen für fast alle Dateikopiervorgänge unter Windows sind.


3
RoboCopy scheint besser zu sein als XCopy, da xcopy nach Datei- oder Ordnerentscheidungen fragt. Und ich kann es nicht ablehnen. Es muss vollautomatisch arbeiten können.
Bitterblue

@ mini-me Ich weiß, dass dies sehr spät ist, aber ich kann nicht den gleichen relevanten Schalter finden. Am Ende habe ich eine leere Datei mit demselben Namen erstellt, in die ich kopiere, und sie dann überschrieben. Wenn die Datei bereits vorhanden ist, muss sie nicht gefragt werden, ob es sich um eine Datei oder ein Verzeichnis handelt. (Wenn Sie ein automatisches Verzeichnis wünschen, können Sie ein '/' an den Pfad anhängen, und es wird es tun). Hoffe das hilft zukünftigen Menschen!
Tom C

2
@Eve Als Referenz echo f | xcopy source destination /ywird es automatisch gemacht. Es weist allen Fragen ein "f" als Antwort zu. Es werden auch Überschreibanforderungen übergeben (f wird als ja angenommen, denke ich).
ndm13

14

Um das 'Geben Sie einen Dateinamen oder einen Verzeichnisnamen auf dem Ziel an (F = Datei, D = Verzeichnis)?' Eingabeaufforderung mit xcopy, können Sie Folgendes tun ...

echo f | xcopy /f /y srcfile destfile

oder für diejenigen von uns, die nur große Unterstrukturen / Ordner kopieren:

use / i, das das Ziel angibt, muss ein Verzeichnis sein, wenn mehr als eine Datei kopiert wird


(Echo "f" für Dateien oder "D" für Verzeichnisse)
JinSnow

Ich versuche es jetzt und es funktioniert einfach nicht - ich bekomme immer Eingabeaufforderungen, wenn ich versuche, eine Datei in ein anderes Verzeichnis zu kopieren. Verwenden Sie Win 10, wenn dies überhaupt Auswirkungen hat. Echo f | xcopy / f / y "My.dll" "C: \ myFolder \ My.dll". Ich habe es mit einer Kombination anderer Schalter ohne Erfolg (und Großbuchstaben F) versucht
Prof

3

Wenn Sie eine Datei ohne absoluten Pfad kopieren möchten, mit anderen Worten:

Vergessen Sie nicht, einen Backslash in den Pfad zu schreiben UND keinen Schrägstrich

Beispiel:

    copy children-folder\file.something .\other-children-folder

PS: Der absolute Pfad kann mit diesen Platzhaltern abgerufen werden, die als "Stapelparameter" bezeichnet werden.

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

Überprüfen Sie hier die Dokumentation zur Kopie: https://technet.microsoft.com/en-us/library/bb490886.aspx

und auch hier für die Dokumentation der Stapelparameter : https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true


Ich denke, dass \ Backslash heißt.
Leon Bohmann

2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.

0

Schauen Sie sich das rsyncbasierte Windows-Tool NASBackup an . Es ist ein Bonus, wenn Sie mit rsync-Befehlen vertraut sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.