Copiar un archivo (en posición relativa) con .bat

Resuelto
Azep65 Mensajes publicados 10 Estado Miembro -  
Azep65 Mensajes publicados 10 Estado Miembro -
Buenas noches, me gustaría copiar un (o varios) archivos utilizando un comando en .bat
Mi problema es que este .bat debe estar en una carpeta de un juego y, por lo tanto, la ruta no es fija. ¿Es realmente posible hacer esto o es obligatorio tener la ruta completa?

Aquí está mi carpeta del juego:
Minecraft2D\Maps\niveaux.lvl
a copiar en
Minecraft2D\niveaux.lvl

A la espera de cualquier respuesta, ¡gracias a todos!

8 respuestas

  1. djdakta Mensajes publicados 789 Fecha de registro   Estado Miembro Última intervención   166
     
    Hola,

    Lo ideal sería tener la ruta completa.
    Aquí está el contenido del .bat

    @ECHO OFF
    xcopy X:\Minecraft2D\Maps\niveaux.lvl Y:\Minecraft2D\niveaux.lvl /m /e /y

    /m = copiar solo los archivos actualizados
    /e = copiar todas las subcarpetas
    /y = solicitar confirmación antes de sobrescribir

    Si hay espacios en los nombres de carpetas/archivos, hay que usar ""

    xcopy "c:\source juego" "x:\destination juego" /m /e /y

    --
    Saludos de
    Dj Dakta
    2
  2. Azep65 Mensajes publicados 10 Estado Miembro
     
    ¡Ok, gracias por la información complementaria!
    Gracias djdakta, está funcionando bien, pero no puedo mover la carpeta del juego.
    ¿Cree que es posible?
    De lo contrario, pensaba en programar una aplicación en C para crear y copiar el contenido de los archivos.
    La ventaja es que el camino se puede hacer a partir de la posición del .exe, pero es bastante largo de codificar...
    Intento todo eso y les diré, gracias por su ayuda.
    0
  3. djdakta Mensajes publicados 789 Fecha de registro   Estado Miembro Última intervención   166
     
    Ehm... ¿Quieres copiar el archivo del juego a otro lugar, o simplemente lo quieres mover?
    Quizás sea una pregunta tonta, pero ¿por qué te importa tanto que este archivo sea copiado/movido?
    ¿No está bien donde está? ;-)

    --
    Saludos de
    Dj Dakta
    0
  4. djdakta Mensajes publicados 789 Fecha de registro   Estado Miembro Última intervención   166
     


    Para mover una carpeta o uno o más archivo(s):

    MOVE [unidad:] [ruta]nombreDelArchivo destino

    Para renombrar una carpeta:

    MOVE [unidad:] [ruta]nombreDeLaCarpeta1 nombreDeLaCarpeta2

    --
    Saludos de
    Dj Dakta
    0
  5. Azep65 Mensajes publicados 10 Estado Miembro
     
    Gracias, pero eso no resuelve realmente mi problema:
    En resumen, el Juego utiliza y modifica los archivos, así que estoy buscando un sistema de reinicialización.
    Algunos archivos se colocan en una carpeta (madre), sirven como originales (y nunca serán modificados). Luego, en otra carpeta hay los archivos modificados por el juego (carpeta hija). El .bat debe COPIAR los archivos madre en la carpeta hija para reemplazar y devolver a su estado original los archivos. Restauración a cero (pero no archivos vacíos).
    Espero que esta explicación sea más precisa.
    Por ahora funciona, pero no puedo mover el juego, la ruta completa cambia.
    Puede que sea imposible hacer esto con un .bat, estoy buscando hacerlo en C, sé que es posible, pero necesito tiempo para empezar.
    Te lo diré lo antes posible, ¡gracias!
    0
  6. Pierrecastor Mensajes publicados 10830 Fecha de registro   Estado Moderador Última intervención   4 216
     
    Hola

    Una pista aquí:

    https://stackoverflow.com/questions/14936625/relative-path-in-bat-script

    https://www.developpez.net/forums/d1504346/general-developpement/programmation-systeme/windows/scripts-batch/chemin-relatif-absolu/

    Enciende un fuego para alguien y estará caliente el resto del día. Prende fuego a un hombre y estará caliente el resto de su vida.
    -Terry Pratchett-
    0
    1. Azep65 Mensajes publicados 10 Estado Miembro
       
      Funciona a primera vista, gracias tu enlace es muy interesante, lo pruebo completamente mañana y publico el código.
      ¡Muchas gracias, mi problema se resuelve!
      0
      1. Pierrecastor Mensajes publicados 10830 Fecha de registro   Estado Moderador Última intervención   4 216 > Azep65 Mensajes publicados 10 Estado Miembro
         
        solo escribí "enlace relativo batch" en un motor de búsqueda, pero nada. ;-)

        Hay que decir que sabía que era algo que se podía hacer fácilmente en bash (consola de linux), pensé que debía ser posible en batch, aunque batch está a 100000 millas de las posibilidades que ofrece bash.
        0
    2. Azep65 Mensajes publicados 10 Estado Miembro
       
      Entonces funciona, pero con cada archivo me pregunta si es un directorio o un archivo, por lo que tengo que escribir "F" cada vez y no es nada práctico..
      ¿Alguna idea?
      0
    3. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      /i
      Si el parámetro Fuente corresponde a un directorio o contiene caracteres comodín y el parámetro Destino no está especificado, el comando xcopy asume que el nombre del directorio de destino es destino y por lo tanto se crea un nuevo directorio. Todos los archivos se copian luego en este nuevo directorio. Por defecto, el comando xcopy pregunta al usuario si el destino es un archivo o un directorio.
      0
    4. Azep65 Mensajes publicados 10 Estado Miembro
       
      Ok de acuerdo, por lo tanto es ineludible...
      Al final creo que nunca será perfecto con un .bat (el aspecto aterrador de la consola, antivirus...) seguramente no es adecuado.
      0
  7. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    hola
    Aquí está mi archivo del juego:
    Minecraft2D\Maps\niveles.lvl
    para copiar en
    Minecraft2D\niveles.lvl

    copiar archivo ..\..\niveles.lvl
    0
  8. Azep65 Mensajes publicados 10 Estado Miembro
     
    Resuelto, programa especial codificado en C, funciona perfectamente.
    El batch está bien pero tiene defectos, especialmente con los antivirus...
    0