it-swarm.com.de

batch/bat, um Ordner und Inhalt auf einmal zu kopieren

Ich schreibe ein Batch-Skript, das eine Kopie erstellt. Ich möchte ein Skript erstellen, um einen ganzen Ordner zu kopieren. Wenn ich eine einzelne Datei kopieren möchte, mache ich das 

copy %~dp0file.txt file.txt 

Wenn ich einen Ordner mit dieser Struktur habe, gibt es einen Befehl, den gesamten Ordner mit seinem Inhalt auf einmal zu kopieren, wobei die genaue Struktur erhalten bleibt.

mainfolder/
  file1.txt
  file2.txt
  insidefolder/
     file3.txt
     file4.txt 
     file5.txt
28
zmol

wenn Sie xcopy verwenden, können Sie /E param verwenden, um Verzeichnisse und Unterverzeichnisse und die darin enthaltenen Dateien zu kopieren, einschließlich der Verzeichnisstruktur für leere Verzeichnisse

xcopy [source] [destination] /E
46
akf

Der alte Weg:

xcopy [source] [destination] /E

xcopy ist veraltet. Robocopy ersetzt Xcopy. Es kommt mit Windows 8, 8.1 und 10.

robocopy [source] [destination] /E

robocopy hat mehrere Vorteile:

  • kopierpfade mit mehr als 259 Zeichen
  • multithread-Kopieren

Weitere Details hier .

7
Vertexwahn

Ich vermute, dass der Befehl xcopy die Zauberkugel ist, nach der Sie suchen.

Es kann Dateien, Verzeichnisse und sogar ganze Laufwerke kopieren, wobei die ursprüngliche Verzeichnishierarchie erhalten bleibt. Verglichen mit dem Basisbefehl copy stehen auch einige zusätzliche Optionen zur Verfügung.

Schauen Sie sich die Dokumentation von hier an. 

Wenn Ihre Batchdatei nur unter Windows Vista oder höher ausgeführt werden muss, können Sie stattdessen robocopy verwenden. Dies ist ein noch leistungsfähigeres Werkzeug als xcopy und ist jetzt im Betriebssystem integriert. Die Dokumentation ist verfügbar hier .

5
Cody Gray

Ich interessierte mich für die ursprüngliche -Frage hier und für verwandte Fragen.

Für eine Antwort habe ich diese Woche einige Experimente mit XCOPY gemacht.

Um die ursprüngliche Frage zu beantworten, poste ich hier die Ergebnisse meiner Experimente.

Ich habe die Experimente unter Windows 7 64 Bit Professional SP1 mit der Kopie von XCOPY Durchgeführt, die mit dem Betriebssystem geliefert wurde.

Für die Experimente schrieb ich etwas Code in Der Skriptsprache Open Object Rexx Und der Editor-Makrosprache Kexx mit Dem Texteditor KEdit.

XCOPY wurde aus dem Rexx-Code aufgerufen. Der Kexx-Code hat die Bildschirmausgabe von XCOPY bearbeitet, um sich auf die entscheidenden Ergebnisse zu konzentrieren.

Die Experimente hatten alle mit der Verwendung von XCOPY zu tun, um ein Verzeichnis mit mehreren Dateien und Unterverzeichnissen zu kopieren.

Die Experimente bestanden aus 10 Fällen . Jeder Fall passte die Argumente auf XCOPY Und nannte sich einmal XCOPY. In allen zehn Fällen wurde versucht, dieselbe Kopieroperation auszuführen.

Hier sind die Hauptergebnisse:

(1) Von den 10 Fällen machten nur drei. Die anderen 7 Fälle sofort, nur durch die Verarbeitung der Argumente an XCOPY, wurden Fehlermeldungen ausgegeben, z.

Invalid path

Access denied

ohne kopierte Dateien.

Von den drei Fällen, die kopiert wurden, machten sie alle dasselbe Kopieren, das heißt, sie gaben dieselben Ergebnisse.

(2) Wenn Sie ein Verzeichnis X und alle Dateien und Verzeichnisse in Verzeichnis X kopieren möchten, Im hierarchischen Dateisystembaum Im Verzeichnis X verwurzelt sind, dann offensichtlich XCOPY - und das scheint viel von der ursprünglichen Frage zu sein - tut einfach NICHT das.

Eine Konsequenz ist, dass bei Verwendung von XCOPY zum Kopieren des Verzeichnisses X und seines Inhalts dann CAN den Inhalt kopieren kann, jedoch NICHT dasdirectory X selbst; So verlieren Sie den time-date-Stempel im Verzeichnis X, sein Archivbit, die Besitzdaten, Attribute usw.

Wenn das Verzeichnis X ein Unterverzeichnis .__ des Verzeichnisses Y ist, kopiert ein XCOPY von Y den gesamten Inhalt des Verzeichnisses Y WITHdirectory X Also kann auf diese Weise eine Kopie Von Verzeichnis X. Die Kopie vondirectory X wird jedoch mit dem Zeitstempel des Laufs von XCOPY und NICHT mit dem Zeitstempel des OriginalsVerzeichnis X. versehen.

Diese Änderung in den Datumsstempeln kann Für eine Kopie eines Verzeichnisses mit einer Menge heruntergeladener Webseiten unpraktisch sein: Die HTML -Datei der Webseite hat das Ursprüngliche Datum stempel, aber das entsprechende Unterverzeichnis für Dateien, die verwendet werdenvon der HTML-Datei wird der Zeitstempel des Laufs von XCOPY erhalten. Wenn Die Kopie nach Datumsstempel sortiert wird, werden alle Unterverzeichnisse, die HTML-Dateien und die Entsprechenden Unterverzeichnisse, z.

x.htm

x_files

kann in der Sortierung am time-date weit auseinander stehen.

Hierarchische Dateisysteme gehen weit zurück, IIRC zu Multics bei MIT im Jahr 1969, und seit Haben dann viele Leute die Zwei Fälle erkannt, denen eine Verzeichnis X, (i) Kopie gegeben wurdedirectory X und seinen gesamten Inhalt und (ii) kopiert den gesamten Inhalt von X, jedoch nicht __.directory X selbst. Wenn nur aus den Experimenten, macht XCOPY nur (ii).

Die Ergebnisse der 10 Fälle sind also unter . Für jeden Fall haben die ersten Zeilen in den Ergebnissen die ersten drei Argumente bis XCOPY. Die erste Zeile enthält also den treename des zu kopierenden Verzeichnisses, die 'Source'; Die zweite Zeile enthält den treename des Verzeichnisses, um die Kopien abzurufen, das 'Ziel' und die dritte Zeile die Optionen für XCOPY. Die verbleibenden 1-2 Zeilen haben die Ergebnisse des Laufs von XCOPY.

Ein großer Punkt bei den Optionen ist, dass Optionen/X und/O das Ergebnis ergeben

Access denied

Um dies zu sehen, vergleichen Sie Fall 8 mit den anderen Fällen, die identisch sind, nicht über /Xund/O verfügten, sondern kopierten.

Diese Experimente haben mir geholfen, XCOPY zu verstehen und zur Antwort auf die ursprüngliche Frage beizutragen.

======= case 1 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_1\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 2 ==================
"k:\software\dir_time-date\*"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_2\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 3 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_3\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 4 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_4\"
options = /E /F /G /H /K /R /V /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 5 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_5\"
options = /E /F /G /H /K /O /R /S /X /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 6 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_6\"
options = /E /F /G /H /I /K /O /R /S /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 7 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_7"
options = /E /F /G /H /I /K /R /S /Y
Result:  20 File(s) copied
======= case 8 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_8"
options = /E /F /G /H /I /K /O /R /S /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 9 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_9"
options = /I /S
Result:  20 File(s) copied
======= case 10 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_10"
options = /E /I /S
Result:  20 File(s) copied
0
a_programmer

Für die Ordnerkopie können Sie verwenden

robocopy C:\Source D:\Destination /E

Für Dateikopie

copy D:\Sourcefile.txt D:\backup\Destinationfile.txt /Y 

Löschen Sie die Datei in einem Ordner zum letzten Änderungsdatum mehr als eines Tages

forfiles -p "D:\FolderPath" -s -m *.[Filetype eg-->.txt] -d -[Numberof dates] -c "cmd /c del @PATH"

Und Sie können eine Task in Windows planen, um diese Aufgabe automatisch in einer bestimmten Zeit auszuführen.