Kopieren des gesamten Inhalts eines Ordners in einen anderen Ordner mithilfe einer Batchdatei?

130

Ich habe einen Ordner in C:\Folder1

Ich möchte den gesamten Inhalt an Folder1einen anderen Ort kopieren.D:\Folder2

Wie mache ich das mit einer Batch-Datei?

SCM
quelle

Antworten:

163

xcopy.exeist hier die Lösung. Es ist in Windows integriert.

xcopy /s c:\Folder1 d:\Folder2

Weitere Optionen finden Sie unter http://www.computerhope.com/xcopyhlp.htm

eHussain
quelle
3
Hallo Hussain, ich habe den Befehl xcopy / sc: \ Folder1 d: \ Folder2 in der Batchdatei ausprobiert, aber er funktioniert bei mir nicht. Kannst du mich bitte mehr führen?
SCM
Hallo, könnte es sein, dass Sie diese Kopie nicht auf Ihrem Computer haben. Sie können jedoch die Batch-Datei hier herunterladen. Brothersoft.com/xcopy-177904.html
eHussain
4
Wenn Sie auch leere Unterverzeichnisse kopieren möchten, sollten Sie / s / e-Flags verwenden.
Ameba Spugnosa
Enthält / e nicht automatisch / s?
mghicks
14
xcopyist veraltet und löst einen Fehler "Unzureichender Speicher" aus, wenn der Dateiname länger als 254 Zeichen ist. Verwenden Sie robocopystattdessen: robocopy C:\Folder1 D:\Folder2 /COPYALL /E en.wikipedia.org/wiki/Robocopy
Marco Demaio
39

Wenn Sie Robokopie haben,

robocopy C:\Folder1 D:\Folder2 /COPYALL /E

Andernfalls,

xcopy /e /v C:\Folder1 D:\Folder2
mghicks
quelle
1
Wenn dies den Inhalt von Ordner1 kopiert, was tun Sie, wenn Sie den Ordner selbst kopieren möchten?
Kyle Delaney
2
@ KyleDelaney fügen Sie den Namen des Quellordners in das Ziel ein, z. B. "xcopy / e / v C: \ Folder1 D: \ Folder2 \ Folder1 \"
mghicks
1
Beachten Sie, dass RoboCopy \ als Escape-Zeichen verwendet (CMD nicht) , wenn Sie versuchen, einen zitierten Pfad mit einem Leerzeichen und einem abschließenden Schrägstrich zu übergeben, als würden "C:\My Folder\"Sie möglicherweise eine böse Überraschung erleben. Ich empfehle, diese SS64-Seite sehr sorgfältig zu lesen. Eine vollständige Übersicht über das Kaninchenloch "Was ist ein Escape-Charakter in CMD?" Finden Sie unter Escaping Double Quotes in Batch Script .
jrh
21

Wenn Sie die Nachricht entfernen möchten, die angibt, ob das Ziel eine Datei oder ein Ordner ist, fügen Sie einfach einen Schrägstrich hinzu:

xcopy /s c:\Folder1 d:\Folder2\

ghiboz
quelle
16

Ich sehe viele Antworten, die auf die Verwendung von xcopy hinweisen. Das ist aber unnötig. Da in der Frage klar erwähnt wird, dass der Autor möchte, dass DER INHALT IM ORDNER und nicht der Ordner selbst in diesem Fall kopiert werden, können wir:

copy "C:\Folder1" *.*  "D:\Folder2"

Das alles xcopy kann verwendet werden, wenn ein Unterverzeichnis in vorhanden istC:\Folder1

Kingzel
quelle
1
Dies funktioniert nicht, wenn der Ordner, in den Sie kopieren, noch nicht vorhanden ist (glaube ich), also möchten Sie vielleicht hinzufügenmd D:\Folder2
Mark Deven
2
Mein copyBefehl (Windows 10-Eingabeaufforderung) teilt mir mit, dass die Syntax falsch ist. Das Folgende wäre die richtige Syntax:copy "C:\Folder1\*.*" "D:\Folder2"
j00hi
4

RoboCopy hat bei mir nicht funktioniert, und hier gibt es einige gute Lösungen, aber keine hat die XCopy-Schalter und ihre Funktionsweise erklärt. Außerdem benötigen Sie Anführungszeichen, falls Ihr Pfad Leerzeichen enthält.

xcopy / i / e "C: \ temp \ Ordner 1" "C: \ temp \ Ordner 2"

Hier ist die Dokumentation von Microsoft:

XCopy MS-Dokumentation

/s: Specifies to include subdirectories. Excludes empty subdirectories
/e: Copies all subdirectories, even if they are empty
/i: specifies the destination is a folder (Otherwise it prompts you)
Jordanien
quelle
2
@echo off
::Ask
echo Your Source Path:
set INPUT1=
set /P INPUT1=Type input: %=%

echo Your Destination Path:
set INPUT2=
set /P INPUT2=Type input: %=%

xcopy %INPUT1% %INPUT2% /y /s
Akash Dahiwelkar
quelle
2

Auf meinem PC benötigen xcopy und robocopy auch den Pfad zu ihnen, dh C: \ Windows \ System32 \ xcopy.exe

Deshalb benutze ich einfach "copy": copy / y .... \ Folder1 \ File.txt .... \ Folder2 \

Dreckiger Hund
quelle
2
@echo off
xcopy /s C:\yourfile C:\anotherfile\

So wird es gemacht! Einfach, richtig?

Hampusma
quelle
-1

Zu Ihrer Information ... Wenn Sie TortoiseSVN verwenden und eine einfache Batchdatei erstellen möchten, um ganze Repositorys regelmäßig an einem "sicheren" Speicherort zu xkopieren (oder zu spiegeln), ist dies der spezifische Code, den Sie möglicherweise verwenden möchten. Es kopiert über die versteckten Verzeichnisse / Dateien, verwaltet schreibgeschützte Attribute und alle Unterverzeichnisse und das Beste von allem fordert nicht zur Eingabe auf. Stellen Sie einfach sicher, dass Sie Ordner1 (sicheres Repo) und Ordner2 (verwendbares Repo) korrekt zuweisen.

@echo off
echo "Setting variables..."
set folder1="Z:\Path\To\Backup\Repo\Directory"
set folder2="\\Path\To\Usable\Repo\Directory"
echo "Removing sandbox version..."
IF EXIST %folder1% (
    rmdir %folder1% /s /q
)
echo "Copying official repository into backup location..."
xcopy /e /i /v /h /k %folder2% %folder1%

Und das war's Leute!

Fügen Sie Ihren geplanten Aufgaben hinzu und schauen Sie niemals zurück.

TheKirkwoods
quelle
-2
@echo off
:: variables
echo Backing up file
set /P source=Enter source folder:
set /P destination=Enter Destination folder:
set xcopy=xcopy /S/E/V/Q/F/H/I/N
%xcopy% %source% %destination%
echo files will be copy press enter to proceed
pause
Vaibhav Veralkar
quelle
2
Eine Erklärung Ihres Codes kommt nicht nur dem Fragesteller dieser Frage zugute, sondern auch zukünftigen Personen, die auf der Suche nach einer Lösung für dasselbe Problem darüber stolpern.
Josh Burgess
3
Sie haben mehrere Flags, die anderen Flags direkt widersprechen. /Skopiert Verzeichnisse und Unterverzeichnisse mit Ausnahme von leeren, während /EVerzeichnisse und Unterverzeichnisse einschließlich leerer Verzeichnisse kopiert werden. /Qzeigt beim Kopieren nicht die /FDateinamen an , während beim Kopieren die vollständigen Quell- und Zieldateinamen angezeigt werden.
SomethingDark
-2

Ich habe eine .bat-Datei geschrieben, um eine Datei zu kopieren und in einen temporären Ordner einzufügen und sie komprimieren und in einen jdm-Mount-Punkt übertragen zu lassen. Ich hoffe, dies würde helfen.

    @echo off
    if not exist "C:\Temp Backup\" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
    if not exist "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP"
    if not exist "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
    xcopy /s/e/q "C:\Source" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
   Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
    "C:\Program Files (x86)\WinRAR\WinRAR.exe" a  "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP\ZIP_Backup_%date:~-4,4%_%date:~-10,2%_%date:~-7,2%.rar" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\TELIUM"
    "C:\Program Files (x86)\WinRAR\WinRAR.exe" a  "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP\ZIP_Backup_Log_%date:~-4,4%_%date:~-10,2%_%date:~-7,2%.rar" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
    NET USE \\IP\IPC$ /u:IP\username password
    ROBOCOPY "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP"  "\\IP\Backup Folder" /z /MIR /unilog+:"C:\backup_log_%date:~-4,4%%date:~-10,2%%date:~-7,2%.log"
    NET USE \\172.20.10.103\IPC$ /D
    RMDIR /S /Q "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
Vinod Amarathunga
quelle