Archivo por lotes para copiar archivos de una carpeta a otra carpeta

235

Tengo una carpeta de almacenamiento en una red en la que todos los usuarios almacenarán sus datos activos en un servidor. Ahora ese servidor será reemplazado por uno nuevo debido a un problema, así que necesito copiar los archivos de las subcarpetas de la carpeta de almacenamiento del servidor anterior a la nueva carpeta de almacenamiento del servidor. Tengo debajo ex:

desde \ Oldeserver \ storage \ data & files a \ New server \ storage \ data & files.

usuario73628
fuente
3
¿Asumo que estás hablando de un entorno de Windows?
Alan Plum
44
@ HugoM.Zuleta, conozco los archivos .bat. Pero "archivo por lotes" no necesariamente garantiza un entorno de Windows. El uso del término es anterior a Windows (al igual que los archivos .bat) e incluso he visto a principiantes usar el término para referirse a "scripts de shell" en entornos * nix.
Alan Plum
1
@pluma Estoy de acuerdo, y esto se debe principalmente a que se refieren a operaciones por lotes realizadas por las herramientas de scripting de su sistema operativo.
Hugo M. Zuleta

Respuestas:

441

xcopy.exe es definitivamente tu amigo aquí. Está integrado en Windows, por lo que su costo no es nada.

Sólo xcopy /s c:\source d:\target

Probablemente quieras modificar algunas cosas; Algunas de las opciones que también agregamos incluyen:

  • /s/e - copia recursiva, incluida la copia de directorios vacíos.
  • /v- agregue esto para verificar la copia contra el original. más lento, pero para los paranoicos.
  • /h - Copiar sistema y archivos ocultos.
  • /k- copiar atributos de solo lectura junto con archivos. de lo contrario, todos los archivos se convierten en lectura-escritura.
  • /x- Si le interesan los permisos, es posible que desee /oo /x.
  • /y - no pregunte antes de sobrescribir los archivos existentes.
  • /z- Si cree que la copia puede fallar y desea reiniciarla, úsela. Coloca un marcador en cada archivo a medida que se copia, por lo que puede volver a ejecutar el comando xcopy para retomar desde donde lo dejó.

Si cree que la xcopy puede fallar a la mitad (como cuando está copiando a través de una conexión de red débil), o que tiene que detenerla y desea continuarla más tarde, puede usarla xcopy /s/z c:\source d:\target.

Espero que esto ayude.

lavinio
fuente
2
@Iavinio Se está preguntando archivo o directorio al copiar un archivo. ¿Hay alguna forma de suprimir eso?
Bitterblue
Hola @ mini-me: descubrí que si se trata de un directorio, puede especificar un carácter '/' final y no verá ese mensaje.
DaveDev
2
/i- Si el destino no existe y se copia más de un archivo, se supone que el destino debe ser un directorio.
lavinio
1
¿Cómo copiar un solo archivo del directorio?
Charan Raju CR
10
Para evitar el mensaje "archivo o directorio", echo f | xcopy /s /f srcfile destfile
ejecute
56

Mi favorito para respaldar datos es:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/ mir es para espejo. También puede usar / mov para mover archivos. Reproduce exactamente la misma carpeta. Puede eliminar / sobrescribir archivos según sea necesario. Funciona muy bien para mi. Es más rápido que xcopy / copy. También está construido en Windows.

Fuente: http://technet.microsoft.com/en-us/library/cc733145.aspx

Etienne Dupuis
fuente
2
Yo apoyo esto. Es realmente rapido. mucho más rápido que xcopy
Ike
¿Hay alguna manera de eliminar recursivamente thumbs.db similar a esto?
drooh
54

Para ser claros, cuando usas xcopy /s c:\source d:\target , coloque "" alrededor de c: \ source y d: \ target, de lo contrario obtendrá un error.

es decir, si hay espacios en el camino, es decir, si tiene:

"C:\Some Folder\*.txt"

pero no es obligatorio si tiene:

C:\SomeFolder\*.txt
Ike
fuente
1
Las comillas hicieron el truco;) gracias también usé / Y para reemplazar el archivo si existe :) Ejemplo: ´´´xcopy / s "c: \ source" "d: \ target" / Y```
Joel Carneiro
18

Es posible que desee echar un vistazo a XCopy o RoboCopy, que son soluciones bastante completas para casi todas las operaciones de copia de archivos en Windows.

Joey
fuente
3
RoboCopy parece ser mejor que XCopy porque xcopy pide decisiones de archivo o carpeta. Y no puedo rechazarlo. DEBE poder funcionar completamente automático.
Bitterblue
@ mini-me Sé que es muy tarde, sin embargo, no puedo encontrar el mismo interruptor relevante. Terminé recurriendo a crear un archivo en blanco con el mismo nombre que estoy copiando y luego sobrescribirlo. Si el archivo ya existe, no se molesta en preguntar si es un archivo o directorio. (Si desea un directorio automático, puede agregar un '/' a la ruta y lo hará). Espero que esto ayude a las personas del futuro!
Tom C
2
@Eve Para referencia, echo f | xcopy source destination /ylo hará automático. Asigna a todas las preguntas una "f" como respuesta. También pasará solicitudes de sobrescritura (creo que f se toma como sí).
ndm13
14

Para omitir '¿especificar un nombre de archivo o nombre de directorio en el destino (F = archivo, D = directorio)?' con xcopy, puede hacer lo siguiente ...

echo f | xcopy /f /y srcfile destfile

o para aquellos de nosotros que solo copiamos grandes estructuras / carpetas:

use / i que especifica el destino debe ser un directorio si copia más de un archivo

Wintondeshong
fuente
(echo "f" para archivos o "D" para directorios)
JinSnow
tratando de hacer esto ahora y simplemente no funciona: siempre recibo indicaciones cuando intento copiar un archivo a otro directorio. Usando Win 10 si eso lo afecta en absoluto echo f | xcopy / f / y "My.dll" "C: \ myFolder \ My.dll". Lo he intentado con una combinación de otros conmutadores en vano (y F mayúscula)
Prof
3

si desea copiar el archivo que no usa la ruta absoluta, la ruta relativa en otras palabras:

no olvides escribir la barra diagonal inversa en la ruta Y NO la barra diagonal

ejemplo:

    copy children-folder\file.something .\other-children-folder

PD: la ruta absoluta se puede recuperar utilizando estos comodines llamados "parámetros por lotes"

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

Consulte la documentación aquí acerca de la copia: https://technet.microsoft.com/en-us/library/bb490886.aspx

y también aquí para la documentación de parámetros de lote: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

marcdahan
fuente
Creo que eso se llama barra invertida.
Leon Bohmann
2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.
David Castro
fuente
0

Mire la rsyncherramienta basada en NASBackup de Windows . Será una ventaja si está familiarizado con los comandos rsync.

nik
fuente