¿Cómo guardar datos en un archivo por lotes (.bat)?

Me gustaría saber cómo podría hacer cambios en un archivo por lotes que se esté ejecutando y que pueda guardarlo... He probado con el comando "set", pero solo me sirve para la sesión actual. Un ejemplo es tener un menú y que puedas escoger el color que quieras para que cuando habrás ese menú tenga siempre ese color sin tener que entrar en "editar" y escribir "Color A", por ejemplo.

1

1 respuesta

Respuesta
1

No entiendo muy bien lo que quieres hacer. La forma típica de escribir algo en un archivo desde un bat es mediante ECHO redireccionado al archivo. De esa forma creo que podrías "reescribir" incluso el BAT que se está ejecutando aunque no sé si lo tendrá guardado en memoria de alguna manera. Pero si lo que quieres es que como consecuencia de una elección se modifique alguna instrucción del BAT situada en una línea concreta eso puede ser complicado. Una posibilidad sería hacer una copia del bat en un archivo auxiliar. Si una opción del menú que dices implica una modificación del bat irías copiando línea a línea las líneas anteriores en ese otro archivo y cuando llegue la línea afectada por la modificación la escribes desde el bat en lugar de copiarla. Luego continúas con la copia de las líneas restantes. Finalmente copias el archivo auxiliar sobre el propio bat.

Pero a mí me parecería más razonable usar una especie de archivo INI en el que se guardarían los valores de las variables del bat que se consideren configurables. Por ejemplo con una estructura

variable = valor. Si en la carga del INI se van asignando los valores según se van leyendo si el BAT maestro añade una línea que modifica el valor de la variable será ese valor el que se le asignaría.

Ya había probado algo parecido a crear una copia del bat con los cambios, pero no funciona del todo bien... Te adjunto la imagen a ver si así sabrías decirme cómo solucionarlo.

Lo que digo que quiero hacer es lo típico de que entras en "Ajustes" en una aplicación y te deja modificar algún parámetro, como el color de la aplicación, nombre de usuario, contraseña de acceso, por ponerte otro ejemplo.

En otro apartado del menú he puesto un apartado en la que solo se puede entrar si pones bien la contraseña:

:menuprueba

set/p input= Indique la contraseña:

if %input%== 1234 goto access

Igual así entiendes mejor mi duda... Esa contraseña es "por defecto", es decir, la he colocado yo, obviamente, pero lo que querría hacer es de alguna manera poder cambiarla por estando el bat en ejecución cuando me apetezca.

Bueno, te adjunto como te decía al principio la imagen de lo que tengo hecho:

Hay un par de cosas que no entiendo:

1. ¿Qué se supone que hacen las instrucciones "c %input%" que aparecen dos veces en este fragmento del bat?

2. Aparte de crear un directorio de nombre "Datos guardados" en el que se copia un prueba.bat cuyo original luego se renombra y finalmente se borra no veo que se guarde nada en la sección SAVE.

1. 'c' es la variable del color', con eso he intentado hacer que al ponerlo con el "set", es decir, "set c" debería hacer que cuando ponga "c" en alguna parte del bat, coja el valor que le haya indicado, en este caso el color que le haya indicado. Pero ya me he dado cuenta de que lo he puesto mal. En vez de poner "c %input%" debo poner "%c%".

2. Con eso simplemente he querido intenar hacer una especie de guardado, cogiendo el bat (prueba.bat) haciendo una copia de él (suponiendo que se han modificado los valores, en este caso el color) en el directorio "Datos guardados", después renombra el archivo original a "oldprueba.bat" y después lo elimina, o al menos es lo que debería hacer...

Lo he probado y crea el directorio, pero no lo mueve. Renombra el archibo bat, pero no lo borra... Quizás deba hacer lo mismo pero para cada paso hacer un bat diferente y así igual no habrá "colisiones" a la hora de hacer todo a la vez.

Muchas gracias, por la ayuda

Creo que tienes algún problema de concepto. El prueba.bat que has guardado es idéntico al que estás ejecutando. Los cambios realizados se guardan en la memoria del ordenador (o en las variables de entorno como mucho). Por tanto lo que dices "suponiendo que se han modificado los valores, en este caso el color" no es cierto. Para modificar cosas en el prueba.bat tienes que trabajarlo explícitamente. Digamos que el primer comando del bat fuera "color 1e" y que quieres que la próxima vez que se ejecute pase a ser "color fc". Pues tendrás que crearte un pruebaN.bat cuyo primer comando sea "color fc" en lugar de "color 1e". Y para eso tendrás que leer las líneas del prueba.bat y guardar en pruebaN.bat las que no quieras que cambien y sustituir las líneas que quieras cambiar. Un proceso complejo y farragoso porque algunos caracteres pueden no ser fácilmente trasladables.

Por eso te decía que podría ser más razonable trabajar con un archivo auxiliar del bat, digamos un INI en el que se guarden los valores de las variables.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas