Comando de línea de comando para copiar todo el directorio (incluida la carpeta del directorio) a otro directorio

68

usando la línea de comando, me gustaría copiar un directorio a otro. Por ejemplo hay directorio C:/testy C:/test2.

Me gustaría copiar C:/testa C:/test2fin de que el resultado seráC:/test2/test

Todo lo que he encontrado hasta ahora, solamente se copiará los archivos y carpetas contenidas en C:/testen C:/test2, pero deja fuera el directorio padre.

Scott Chamberlain
fuente
1
trate de usar xcopy

Respuestas:

50

Intente usar XCOPYcon el /Einterruptor. Más información aquí .

¡No he tenido que acceder a esta información desde mi cerebro en años !

ACTUALIZAR

La documentación dice que copia todos los archivos y subdirectorios del directorio de origen (lo que significa que el directorio padre no se crea), por lo que tendría que crear testen C:\test2primer lugar y luego usar XCOPY.

vivin
fuente
2
El interruptor '/ T' en Xcopy realizará una copia de directorio y estructura de subdirectorio sin ningún archivo.
MFG
2
Mejor utilizarlo robocopy /CREATE /COPYALL /DCOPY:T src dstpara copiar la carpeta y los archivos vacíos, pero preservar todas las marcas de tiempo y otros atributos.
user1016274
2
En realidad, esto no proporciona respuesta a la pregunta porque testtodavía se necesita crear una carpeta .
IGRACH
3
@IGRACH pensé md testy luego usar xcopyera trivialmente obvio.
vivin
1
Bueno, la pregunta es sobre la copycarpeta que no crea una nueva carpeta y luego copia los contenidos en ella.
IGRACH
35
xcopy c:\test c:\test2\test /s /e /h

Aquí hay información sobre XCOPY [ 1 , 2 ]

Hastur
fuente
2
¿Cómo dejar de pedirme que ingrese "D"?
YumYumYum
2
@YumYumYum: puede usar el modificador / I: "/ I Si el destino no existe y copia más de un archivo, se supone que el destino debe ser un directorio".
Thijs Tijsma
18

Use ROBOCOPY si está creando scripts de respaldo. xcopy ha quedado en desuso y es probable que deje de usarse en un futuro próximo. robocopy puede hacer todo lo que xcopy puede. También es más flexible y confiable. Crear scripts con robocopy los preparará para el futuro.


  1. Use robocopy para copiar fácilmente carpetas. El comando robocopy reemplaza al comando xcopy. Puede copiar rápidamente carpetas completas sin tener que preocuparse por definir el contenido. Por ejemplo, para copiar todo el contenido del directorio C: \ tools a la nueva carpeta D: \ backup \ tools, ingrese lo siguiente:

    robocopy C:\tools D:\backup\tools /e
    

    El modificador / e le dice a robocopy que incluya todos los subdirectorios. Esto incluye carpetas vacías. robocopy copiará automáticamente los archivos ocultos y del sistema. Creará nuevos directorios si no existen en la ubicación de destino.

  2. Reflejar un directorio. Duplicar un directorio es excelente para hacer copias de seguridad. La opción espejo de robocopy copiará todo el contenido del origen al destino. Luego eliminará cualquier cosa en el destino que no exista en la fuente. Esto garantiza que su copia de seguridad solo tenga las últimas versiones de sus archivos. Por ejemplo, para duplicar C: \ Usuarios \ Mis documentos en D: \ copia de seguridad \ Mis documentos, ingrese lo siguiente: [4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    Esta función preservará todos los permisos de los archivos originales.

  3. Habilitar reinicio. Es posible que desee incluir la posibilidad de reiniciar el proceso en caso de que la conexión se corte a mitad de la copia.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Registre el proceso de copia. robocopy le permite crear un archivo de registro. Esto puede ayudarlo a detectar problemas o generar un archivo de lo que se ha copiado.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    El modificador / log + agregará el archivo de registro existente en lugar de sobrescribirlo. Si prefiere sobrescribir el archivo de registro anterior, use /log:.txt.

Program-Me-Rev
fuente
8

Recomiendo robocopy sobre xcopy , ya que tiene muchas más opciones, incluyendo mantener intactas las marcas de tiempo, lo que considero esencial.

Es necesario agregar Robocopy en XP / 2003, pero es estándar desde Vista en adelante.

En realidad, generalmente uso xxcopy , pero la versión de 64 bits no es gratuita.

paradroid
fuente
1
robocopyes un programa de Windows La pregunta era sobre DOS.
Grawity
99
@grawity: La probabilidad de que él realmente use DOS de 16 bits es muy pequeña en comparación con la alta probabilidad de que él llame a CMD 'DOS', como es común en el mundo real.
paradroid el
la verdadera pregunta es: ¿es robocopy un programa de Microsoft?
Knocte
@knocte sí lo es
yossico
5
XCOPY SourceDrive: DestinationDrive: /S /E

Por ejemplo, si necesita copiar E:datos de la H:unidad a la unidad (disco duro externo) a través de la línea de comandos o desde el entorno de comando xboot.

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
Syed khalid Mohammed
fuente
2
/ S no es necesario cuando / E está presente. windows-commandline.com/copy-directory-command-line
Giri
3

Si la pregunta original es a qué he estado buscando una respuesta, entonces, y obviamente ninguno de los anteriores, he encontrado una solución clara.

Lo que estoy buscando es copiar el directorio de prueba en el directorio test2 sin tener que volver a escribirlo. Algo como

xcopy /isvy c:\test d:\test2

donde d:\test2\testno existe antes de la copia pero sí después. Esto ahorraría en la prueba de escritura incorrecta la segunda vez en la ruta de destino. El comando anterior copiará todos los archivos y cualquier directorio en test2 pero no creará el directorio de prueba.

Hasta aquí

xcopy /isvy c:\test d:\test2\test

es realmente la única forma en que he encontrado para hacer este trabajo. Nuevamente, si tiene problemas de escritura, no hay garantía de que los directorios de origen y destino coincidan.

Una alternativa para corregir esto es

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

Esto establece el directorio de destino en la mydirvariable y luego usa esa variable tanto en la ruta de origen como en la de destino. Si escribe la variable incorrectamente, obtendrá un error o el directorio de destino probablemente lo tendrá %al principio y al final.

Es más largo escribir pero menos posibilidades de obtener los nombres incorrectos. Ellos se notarán.

Cuenta
fuente
En realidad, es xcopy /ievy c:\test d:\test2\testmantener la estructura de árbol de directorios, y set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%solo en 1 & será suficiente, ya que el resultado de establecer un valor siempre es exitoso.
NetwOrchestration
0
xcopy SWITCHES SOURCE DESTINATION

Donde SWITCHESpuede ser:

  • Para copiar toda la estructura del directorio:

    /hiev

  • Para sobrescribir archivos en el destino (en caso de que la carpeta de destino ya exista):

    /hievry

  • Para sobrescribir y también copiar con ACL + Attribute:

    /hievxok

Lo más adecuado para su caso:

xcopy /hievry C:\test C:\test2\test

NetwOrchestration
fuente
0

Tuve una situación similar en la que necesitaba copiar una serie de carpetas, incluidos los nombres de las carpetas, en una ubicación de destino, y esperaba que esta pregunta marcada como contestada ayudara, pero realmente no es así.

En primer lugar, definitivamente hay ocasiones en las que uno necesitaría esta habilidad y me encontré con una cuando tuve que copiar carpetas de C: \ Windows \ Assembly \ GAC_MSIL. El Explorador de Windows se niega a mostrar esta carpeta, por lo que debe usar un símbolo del sistema.

Si está familiarizado con la carpeta GAC, sabrá que los nombres de las carpetas no son triviales y es fácil equivocarse si escribe incorrectamente.

Por lo tanto, crear el directorio de antemano no es realmente una opción, a menos que use un script, que terminé usando, ya que esta era la única solución real.

Primero volcar las carpetas que desea copiar en un archivo temporal, esto generalmente se basa en algún patrón, por ejemplo

dir /B policy* > Folders.txt

Luego repita las entradas en el volcado y copie al destino. Xcopy se encargará de crear una carpeta si finaliza el argumento de destino con una barra diagonal inversa (\)

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

Coloque ambos comandos en un archivo por lotes y ejecútelos.

Ahora, si solo xcopy o robocopy tiene esto incorporado.

mahendrent
fuente
0

XCOPY SourceDrive: DestinationDrive: / S / E

Noor All Safaet
fuente
¡Bienvenido a Super User! ¿Puede explicar esto? (especialmente las /S /Ebanderas)
bertieb
0

He llegado a una respuesta alternativa funcional para su pregunta.

En primer lugar, el uso FORFILEScon el /Sparámetro confiere que C:\testse alcanzará cada subdirectorio .

En segundo lugar, con el /Cparámetro, es posible iniciar una cadena de comandos con variables nativas, lo que hace posible crear los directorios idénticos en el destino, y ENTONCES copiar los archivos dentro de ellos, utilizando dos estructuras condicionales.

La primera estructura condicional @isdir==TRUE(asegúrese de usar letras mayúsculas), permite obtener directorios solo desde la fuente, y luego crearlos en el destino con MKDIR [path]\@relpathal final.

Finalmente, el segundo se asegura de que solo esté trabajando con archivos @isdir==FALSE, y luego el comando COPIAR simplemente hace el trabajo, haciendo que todos los archivos sean alcanzados por el comando FORFILES, configurando [path]@relpathcomo destino, para copiar los archivos dentro de los directorios recién creados.

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

Espero que ayude a todos por aquí.

MauGusVicen
fuente