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.

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

lc.
la source
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
Antonio Vinicius Menezes Medei
la source
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?

Aacini
la source
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.