Archivo por lotes para copiar directorios de forma recursiva

123

¿Hay alguna forma de copiar directorios de forma recursiva dentro de un archivo .bat? Si es así, un ejemplo sería genial. Gracias.

sarsnake
fuente
2
te refieres a xcopy / s? ¿O la robocopia más avanzada?
rene
Esto podría ayudarlo, aunque esto elimina, puede cambiar fácilmente para copiar en su
Georges Chitiga

Respuestas:

178

Busque en xcopy , que copiará archivos y subdirectorios de forma recursiva.

Hay ejemplos, 2/3 hacia abajo en la página. De particular utilidad es:

Para copiar todos los archivos y subdirectorios (incluidos los subdirectorios vacíos) de la unidad A a la unidad B, escriba:

xcopy a: b: /s /e

lc.
fuente
16
Probablemente desee que se incluya también el indicador / y para "Suprime la solicitud de confirmación de que desea sobrescribir un archivo de destino existente".
Matthew Lock
11
'xcopy' no es una buena idea porque son famosos por su error de memoria insuficiente . Intente usar 'robocopy'
Rahul
6
@Rahul Hmm ¿de verdad? Nunca he visto eso, pero xcopy ciertamente ha existido desde la Edad Media. Probablemente también podría hacerlo Copy-Item -Recurseen PowerShell.
lc.
1
Desafortunadamente, sí, este comportamiento es muy común :). Si ha visto que esto sucede de forma recurrente, especialmente si desea copiar una gran cantidad de datos, como gigas de datos.
Rahul
10
Esto dice que xcopy ha quedado obsoleto y que debería usarse robocopy.
Mike HR
71

Después de leer los comentarios de la respuesta aceptada, probé el comando robocopy , que funcionó para mí (usando el símbolo del sistema estándar de Windows 7 64 bits SP 1):

robocopy source_dir dest_dir /s /e
Antonio Vinicius Menezes Medei
fuente
5
¡Nunca supe que 'robocopy' es un comando incorporado en Windows 7! Gracias por la respuesta, muy útil y poderosa :)
Anmol Saraf
5
¿No /Eimplica /S? copy subdirectories, including Empty ones.
mbomb007
4
Mmmm /Sy /Eparece implicar cosas opuestas según la /?ayuda de robocopy - s es "no vacíos" e es "vacíos". Creo que deberías elegir uno.
Stuart Brock
1
Para la mayoría de los usuarios, creo que es suficiente hacer / e (incluir directorios vacíos).
phsource
3
Tenga en cuenta que robocopydevuelve un código de salida de 1 si uno o más archivos se copiaron correctamente.
dougnorton
15

Puede escribir un algoritmo recursivo en Batch que le brinde un control exacto de lo que hace en cada subdirectorio anidado:

@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

¿Archivo por lotes de Windows recorriendo directorios para procesar archivos?

Aacini
fuente
4
Gran idea, pero ¿su programa no copia todos los archivos de los directorios de origen en un único directorio de destino sin preservar la jerarquía de carpetas?
Jean-Francois T.