Saltar al contenido

Copiar solo archivos más nuevos de una carpeta a otra

Este grupo de redactores ha estado por horas investigando para dar espuestas a tus interrogantes, te brindamos la respuesta de modo que nuestro deseo es serte de gran ayuda.

Solución:

Use XCOPY con las opciones /D y /L, “copiando” de la carpeta 1 a la carpeta 2.

La opción /D restringe la copia solo a archivos nuevos o modificados.

La opción /L hace que el comando enumere los archivos que se copiarán, pero evita que se realicen copias.

Luego use FOR /F para procesar esos resultados y copie los archivos a la carpeta 3.

for /f "eol=: delims=" %F in ('xcopy /dl "folder1*" "folder2"') do @copy "%F" "f3" >nul

Si se coloca en un archivo por lotes, entonces todos % debe duplicarse como %%.

El XCOPY también imprime un resumen de cuántos archivos están (se verían) afectados. Lo anterior intentará copiar un archivo con el recuento de resumen “nombre” y, por supuesto, fallará. La redirección de la salida a nul evita que se muestre el mensaje de error. Probé en Windows 7 y me sorprendió que el mensaje de error estuviera en stdout y no en stderr. Si el mensaje de error en otras versiones aparece en stderr, entonces el comando también debería obtener 2>nul para evitar el mensaje de error.

Pero existe el riesgo de ocultar los mensajes de error: ¿qué sucede si una copia falla por algún motivo?

Aquí hay una secuencia de comandos que enumerará todos los archivos que se copiaron con éxito, así como también indicará cuál (si corresponde) falló. Utiliza FINDSTR para filtrar el recuento de archivos no deseados. Asume que el conteo de archivos está en inglés, con la forma NNN File(s)por lo que habría que modificarlo para otros idiomas.

@echo off
for /f "eol=: delims=" %%F in (
  'xcopy /dl "folder1*" "folder2" ^| findstr /v "^[0-9][0-9]* File(s)"'
) do copy "%%F" "folder3" >nul && echo "%%F"|| echo FAILED: "%%f"

Aquí hay una variante más compleja que funciona con cualquier idioma. Guarda cada nombre de archivo en una variable y retrasa la copia hasta la siguiente iteración del bucle. La última entrada (el conteo) nunca se copia.

@echo off
setlocal disableDelayedExpansion
set "file="
for /f "eol=: delims=" %%F in ('xcopy /dl "folder1*" "folder2"') do (
  if defined file (
    setlocal enableDelayedExpansion
    copy "!file!" "folder3" >nul && echo "!file!" || echo FAILED: "!file!"
    endlocal
  )
  set "file=%%F"
)

Me gusta ROBOCOPY en su lugar. Usé XCOPY durante años y luego encontré la necesidad de una operación de copia reiniciable a través de una conexión a Internet lenta o nerviosa.

ROBOCOPY origen destino /s /e /xo

o espejo

ROBOCOPY src dest /mir

Utilice las opciones de registro para obtener su lista para examinarla más tarde.

ROBOCOPY src destino /s /e /xo /log:archivo

Más adelante puedes encontrar las referencias de otros administradores, tú asimismo tienes la opción de insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *