jueves, 3 de febrero de 2011

XCopy: "specify a file name or directory name on the target"

En mi trabajo requerimos respaldar una serie de archivos que como parte del proceso estándar que tiene el cliente, se hace con un archivo .BAT que corre un conjunto de comandos XCOPY. Uno por cada archivo que se respalda. Este comando es bastante útil por el conjunto de opciones que tiene, entre las cuales la que destaca para nuestros propósitos es la que crea las carpetas en el path destino si estas no existen (/s).

XCOPY c:\a\very\long\path\to\myfile.txt d:\back-up\to\another\very\long\path\to\myfile.txt /s /y

El único inconveniente que estabamos teniendo, es que por cada archivo el comando nos pedía una confirmación de sí lo que estabamos copiando era un archivo o una carpeta.

specify a file name or directory name on the target
(F = file, D = directory)?


Algo bastante tedioso, y bastante improbable de que no hubiera manera de indicar que todo lo que copiabamos eran archivos. Mis primeras inmersiones en Google no me arrojaron nada que me ayudara a resolver este asunto. Inclusive intenté atacar el problema usando programación con DOS BATCH para arrojar la tecla 'F' pero tampocó fue de ayuda.

En estos días intenté otra vez buscar algo en Google, y ahora sí encontré algo que me ayudó a entender como hay que usar el comando. En el path del destino no hay que dejar el nombre del archivo, sino solamente el path:

XCOPY c:\a\very\long\path\to\myfile.txt d:\back-up\to\another\very\long\path\to\ /s /y

Parece que cuando el destino termina con alguna extensión, el comando no sabe determinar si es un directorio o un archivo. Así de simple era la solución.

3 comentarios:

  1. Gracias, me ha servido de gran ayuda, yo rompiendome la cabeza pensando y resulta que la solución era la más simple.

    ResponderEliminar
  2. Ya. ¿y si lo que quieres es copiar el archivo con otro nombre?
    No puedo usar copy porque necesito recrear directorios.
    No puedo usar más lineas de codigo.

    ResponderEliminar
  3. Ya caigo. Usa:
    ( Echo F | xcopy .............. )

    ResponderEliminar