Fichier batch pour copier les répertoires de manière récursive


123

Existe-t-il un moyen de copier des répertoires de manière récursive dans un fichier .bat? Si tel est le cas, un exemple serait génial. Merci.


2
vous voulez dire xcopy / s? ou la robocopie plus avancée?
— rene

Cela pourrait vous aider, bien que cela supprime, vous pouvez facilement changer pour copier à la place daniweb.com/web-development/threads/61479
— Georges Chitiga

Réponses:


178

Regardez dans xcopy , qui copiera de manière récursive les fichiers et sous-répertoires.

Il y a des exemples, 2/3 en bas de la page. Une utilisation particulière est:

Pour copier tous les fichiers et sous-répertoires (y compris les sous-répertoires vides) du lecteur A vers le lecteur B, tapez:

xcopy a: b: /s /e


16
Vous voudrez probablement que l'indicateur / y soit également inclus pour "Supprime l'invite à confirmer que vous voulez écraser un fichier de destination existant."
— Matthew Lock

11
«xcopy» n'est pas une bonne idée car ils sont notoirement connus pour leur erreur de mémoire insuffisante . Essayez d'utiliser 'robocopy'
— Rahul

6
@Rahul Hmm vraiment? Je n'ai jamais vu ça, mais xcopy existe certainement depuis les âges sombres. Vous pourriez probablement le faire Copy-Item -Recursedans PowerShell à la place.
— lc.

1
Malheureusement oui, ce comportement est très courant :). Si vous avez vu cela se produire de manière récurrente, en particulier si vous souhaitez copier une grande quantité de données comme des gigs de données.
— Rahul le

10
Cela indique que xcopy est obsolète et que robocopy doit être utilisé.
— Mike HR

71

Après avoir lu les commentaires de la réponse acceptée, j'ai essayé la commande robocopy , qui a fonctionné pour moi (en utilisant l'invite de commande standard de Windows 7 64 bits SP 1):

robocopy source_dir dest_dir /s /e

5
Je n'ai jamais su que «robocopy» est une commande intégrée dans Windows 7! Merci pour la réponse, très utile et puissant :)
— Anmol Saraf

5
Cela /En'implique pas /S? copy subdirectories, including Empty ones.
— mbomb007

4
Hmmm /Set /Esemblent impliquer des choses opposées selon l' /?aide de robocopy - s ne sont "pas vides" et "vides". Je pense que vous devriez en choisir un.
— Stuart Brock

1
Pour la plupart des utilisateurs, je pense qu'il suffit de faire / e (inclure les répertoires vides).
— phsource

3
Notez que robocopyrenvoie un code de sortie de 1 si un ou plusieurs fichiers ont été copiés avec succès.
— dougnorton

15

Vous pouvez écrire un algorithme récursif dans Batch qui vous donne un contrôle exact de ce que vous faites dans chaque sous-répertoire imbriqué:

@echo off
call :treeProcess
goto :eof

:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
copy *.* C:\dest\dir
for /D %%d in (*) do (
    cd %%d
    call :treeProcess
    cd ..
)
exit /b

Windows Batch File en boucle dans les répertoires pour traiter les fichiers?


4
Excellente idée, mais votre programme ne copie-t-il pas tous les fichiers des répertoires source dans un répertoire de destination unique sans préserver la hiérarchie des dossiers?
— Jean-Francois T.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.