¿Cómo copiar un archivo a un directorio en DOS y crear directorios si es necesario?

37

¿Cómo puedo copiar un archivo usando comandos de DOS en una estructura de directorio que aún no existe? Necesito poder forzar la creación de la ruta del directorio a la ubicación del archivo de destino si esa ubicación aún no existe.

Por ejemplo, ya hay un archivo.txt en esta ubicación:

C:\file.txt

Y quiero copiarlo a

C:\example\new\path\to\copy\of\file\file.txt

pero en este momento

C:\example\

y todos los subdirectorios pueden o no existir todavía.

Básicamente, estoy buscando un comando "copiar y crear la ruta de destino si es necesario". ¿Cuál recomendaría es la mejor manera de lograr esto?

nodmonkey
fuente
¿Se trata realmente de DOS (o MS-DOS), o se trata de la línea de comandos que se encuentra en las versiones de Windows basadas en NT (2000, XP, Vista, 7, 8, Servidor)?
Bob
Me refería a la CLI de Windows similar a DOS. ¿Cuál recomienda es la mejor manera de describir "CLI de Windows similar a DOS" para el título de la publicación?
nodmonkey
En general, lo usaría Windows command lineen el título / cuerpo, junto con las ventanas de etiquetas y la línea de comandos (tenga en cuenta que cmd.exe es un sinónimo de etiqueta de línea de comandos ). La etiqueta ms-dos debe eliminarse; y la etiqueta dos no debe usarse en ningún caso bajo ninguna circunstancia.
Bob
Sin embargo, en este caso, con las respuestas existentes / aceptadas para DOS / MS-DOS, también puede dejarlas como están. Para referencia futura, DOS debe / debe interpretarse como el sistema operativo (s). Si bien la línea de comandos de Windows se basa en ellos, existen algunas diferencias notables.
Bob
se le puede llamar la pronta cmd
barlop

Respuestas:

28

Sí, eso es xcopy . Así es como se verá:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Información de XCOPY en

También es posible que desee ver ROBOCOPY , en el kit de recursos XP y estándar en Vista, Windows 7 y Server 2008.

robocopy . c:\example\new\path\to\copy\of\file file.txt
bw
fuente
3
xcopy está bien si no necesita cambiar también el nombre de su archivo. Si lo hace, desafortunadamente xcopy le preguntará si el destino es un directorio o un nombre de archivo y no hay un interruptor de línea de comando para especificar "es un archivo".
RomanSt
44
Vea la otra respuesta: use un precedente echo f | con xcopy para responder este aviso automáticamente.
mcw0933
Tenga en cuenta que debe haber un carácter de barra diagonal, ``, al final de la ruta de destino. De lo contrario, el comando preguntará al usuario si el destino es un directorio o un archivo si no existe.
Lii
17

Intenté usar algo como:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Pero me preguntaría si era un archivo o directorio. Como tenía eso en un archivo por lotes con 40000 archivos, no sería práctico. Esta solución solo resuelve parcialmente mi problema: crea la estructura de directorios, pero requiere la interacción del usuario. Encontré la solución a mi problema aquí:

https://stackoverflow.com/questions/4283312/batch-file-asks-for-file-or-folder

Lo que básicamente es agregar un "*" al final del archivo de destino:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt*

EDITAR: como lo señala @romkyns, puede tener resultados no deseados si tiene archivos que tienen el mismo nombre y algo más (como 'file.txt.bak'). En el mismo hilo publicado anteriormente, otra solución que funciona es canalizar "echo f" a su comando:

echo f | xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Donde debería sustituir la "f" por cualquier letra que su sistema use para el archivo, en caso de que la esté usando en otro idioma.

msb
fuente
1
Lo cual solo funciona si no hay ninguno file.txt.baken el directorio, por supuesto. Aún así, esto podría funcionar en algunos escenarios.
RomanSt
@romkyns cierto. unos meses después de publicar esto, me enfrenté al mismo problema e hice la solución "echo f", también funciona muy bien. Editando mi respuesta ...
msb
1
Con echo f | , ya no necesita el seguimiento *.
mcw0933
1
El segundo nombre de archivo es redundante en caso de que sea el mismo. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" funcionará siempre que la barra inclinada final en el directorio esté allí (de lo contrario, pregunta si se quería decir un archivo o un directorio) .
Cuarenta
3

DOS, ¡guau! De todos modos, usa el comando XCOPY .

Dustin Laine
fuente
1
4 años después: sí. DOS todos lo usamos a pesar de que PowerShell existe ...
Mr AH
0

Ya sea que use copyo xCopy, para evitar un error copyo una solicitud de xCopy, pruebe la existencia de la carpeta necesaria y créelo si es necesario:

if not exist "NewPath" MkDir "NewPath"
copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

o combine los comandos con &&en una línea de comando:

if not exist "NewPath" MkDir "NewPath" && copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

Se puede hacer lo mismo con en movelugar de copy. Aprendí sobre esta técnica de una respuesta de StackOverflow sobre cómo hacerlo move.

NewSites
fuente