copier tout le contenu du dossier dans un autre dossier en utilisant un fichier batch?

130

J'ai un dossier dans C:\Folder1

Je souhaite copier tout le contenu de Folder1vers un autre emplacement,D:\Folder2

Comment faire cela en utilisant un fichier batch?

SCM
la source

Réponses:

163

xcopy.exeest la solution ici. Il est intégré à Windows.

xcopy /s c:\Folder1 d:\Folder2

Vous pouvez trouver plus d'options sur http://www.computerhope.com/xcopyhlp.htm

eHussain
la source
3
Bonjour Hussain, j'ai essayé la commande xcopy / sc: \ Folder1 d: \ Folder2 dans un fichier de commandes, mais cela ne fonctionne pas pour moi. pouvez-vous s'il vous plaît me guider davantage.
SCM
Salut, Peut-être que vous n'avez pas cette xcopy sur votre machine .. Cependant, vous pouvez télécharger le fichier de commandes à partir d'ici brothersoft.com/xcopy-177904.html
eHussain
4
Si vous souhaitez copier également des sous-répertoires vides, vous devez utiliser les indicateurs / s / e.
Ameba Spugnosa
/ E n'inclut-il pas automatiquement / s?
mghicks
14
xcopyest obsolète et déclenche une erreur «Mémoire insuffisante» lorsque le nom du fichier contient plus de 254 caractères. Utilisez à la robocopyplace: robocopy C:\Folder1 D:\Folder2 /COPYALL /E en.wikipedia.org/wiki/Robocopy
Marco Demaio
39

Si vous avez robocopy,

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

autrement,

xcopy /e /v C:\Folder1 D:\Folder2
mghicks
la source
1
Si cela copie le contenu de Folder1, que faites-vous si vous souhaitez copier le dossier lui-même?
Kyle Delaney
2
@KyleDelaney inclut le nom du dossier source dans la destination, par exemple "xcopy / e / v C: \ Folder1 D: \ Folder2 \ Folder1 \"
mghicks
1
Notez que RoboCopy utilise \ comme caractère d'échappement (CMD ne le fait pas) , si vous essayez de passer un chemin entre guillemets avec un espace et une barre oblique de fin, comme "C:\My Folder\"vous pourriez avoir une mauvaise surprise. Je recommande de lire très attentivement cette page SS64. Pour un voyage complet dans le terrier du lapin «qu'est-ce qu'un caractère d'échappement dans CMD», voir Échapper à des guillemets doubles dans un script par lots .
jrh
21

si vous souhaitez supprimer le message indiquant si la destination est un fichier ou un dossier, vous ajoutez simplement une barre oblique:

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

ghiboz
la source
16

Je vois beaucoup de réponses suggérant l'utilisation de xcopy. Mais cela n'est pas nécessaire. Comme la question mentionne clairement que l'auteur veut que LE CONTENU DU DOSSIER ne soit pas copié dans le dossier lui-même, dans ce cas, nous pouvons -:

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

Tout cela xcopy peut être utilisé si un sous-répertoire existe dansC:\Folder1

Kingzel
la source
1
Cela ne fonctionne pas si le dossier dans lequel vous copiez n'existe pas encore (je crois), vous voudrez peut-être ajoutermd D:\Folder2
Mark Deven
2
Ma copycommande (invite de commande Windows 10) m'indique que la syntaxe est incorrecte. Ce qui suit serait la syntaxe correcte:copy "C:\Folder1\*.*" "D:\Folder2"
j00hi
4

RoboCopy n'a pas fonctionné pour moi, et il y a quelques bonnes solutions ici, mais aucune n'a expliqué les commutateurs XCopy et ce qu'ils font. Vous avez également besoin de guillemets au cas où votre chemin contient des espaces.

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

Voici la documentation de Microsoft:

Documentation XCopy MS

/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)
Jordan
la source
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
la source
2

Sur mon PC, xcopy et robocopy ont également besoin du chemin d'accès, c'est-à-dire C: \ Windows \ System32 \ xcopy.exe

C'est pourquoi j'utilise simplement "copier": copier / y .... \ Folder1 \ File.txt .... \ Folder2 \

Sale chien
la source
2
@echo off
xcopy /s C:\yourfile C:\anotherfile\

C'est comme ça que ça se fait! Simple, non?

hampusma
la source
-1

FYI ... si vous utilisez TortoiseSVN et que vous voulez créer un simple fichier de commandes pour xcopier (ou mettre en miroir de répertoire) des référentiels entiers dans un emplacement "sûr" sur une base périodique, alors c'est le code spécifique que vous voudrez peut-être utiliser. Il copie les répertoires / fichiers cachés, conserve les attributs en lecture seule et tous les sous-répertoires et, mieux encore, ne demande pas d'entrée. Assurez-vous simplement que vous attribuez correctement le dossier1 (dépôt sécurisé) et le dossier2 (dépôt utilisable).

@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%

Et c'est tout!

Ajoutez à vos tâches planifiées et ne regardez jamais en arrière.

TheKirkwoods
la source
-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
la source
2
Une explication de votre code profitera non seulement au demandeur de cette question, mais aussi aux futures personnes qui trébucheront à la recherche d'une solution au même problème.
Josh Burgess
3
Vous avez plusieurs drapeaux qui contredisent directement d'autres drapeaux. /Scopie les répertoires et sous-répertoires sauf les vides, tandis que les /Erépertoires et sous-répertoires copiés y compris les vides. /Qn'affiche pas les noms de fichiers pendant la copie, tandis que /Faffiche les noms complets des fichiers source et de destination pendant la copie.
SomethingDark
-2

J'ai écrit un fichier .bat pour copier et coller le fichier dans un dossier temporaire et le compresser et le transférer dans un point de montage smb, j'espère que cela aiderait,

    @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
la source