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.