Archivo por lotes para copiar directorios de forma recursiva


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


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

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?


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.