Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Mr. Bit en 14 Mayo 2019, 00:34 am



Título: [Ayuda] Guardar Información en Batch
Publicado por: Mr. Bit en 14 Mayo 2019, 00:34 am
Buenas! Este es el primer post que subo a este Foro. Soy muy nuevo en el tema de Batch. Bueno, no realmente "nuevo", ya que lo conozco y me se algunos comandos desde hace años ya. Sin embargo, nunca he podido avanzar mucho con Batch. Tengo ganas de crear programas interesantes, pero por causa de mi desconocimiento, no puedo.

Mi duda es: ¿Como guardo información dentro de un Batch?
La pregunta no se entiende bien así dicha, así que decidí realizar un par de ejemplos:

Imaginemos que en el Batch dice que mi dinero es $500. Me compro una tarjeta gráfica (en el Batch claro, todo virtual) que vale $100.

Quiero que haya un valor que sea por ejemplo %dinero% pero totalmente fijo. Si tengo $500 y gasto $100  me quedan $400. Y que eso se guarde. Que no vuelva a tener $500 de vuelta. Son solo ejemplos.

Tristemente para mi, no se mucho de programación, por lo tanto no se como expresar de manera limpia y ordenada mi duda. Lo mas parecido que he hecho fue Pawno, aunque todos los códigos y programas son bastante parecidos.

Espero que en este Foro pueda aprender mas de lo que ya se. Muchas gracias de ante mano y saludos!


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: EdePC en 14 Mayo 2019, 02:58 am
Saludos,

- Es cierto que no es fácil encontrar cursos o tutoriales de cmd o batch "de calidad", jeje siempre hay textos feos y desordenados.

- Yo te recomendaría leerte este Tutorial, tiene buena calidad de edición y explicación (incluye pdf descargable):
https://sites.google.com/site/nikos3194rfcindex/home/batch

- Otros manuales de Batch/Cmd básicos de regular calidad (debido al lenguaje XD) es:
https://openlibra.com/es/book/cmd-sin-secretos-v-2

- Luego puedes pasarte a leer los manuales de SirDarckcat:
https://foro.elhacker.net/scripting/programacion_batch_avanzada_nuevo-t132924.0.html

- También tener a mano la referencia completa de Bacth/Cmd en inglés:
https://ss64.com/nt/

- Para dudas puntuales tienes este foro, pero recomendaría googlear tus dudas, por ejemplo StackOverflow es muy buena fuente.

- Siempre puedes hacer pruebas en tu consola (línea de comandos o Símbolo del Sistema), por ejemplo:

-- Guardo 500 en un archivo de texto billetera usando la clásica redirección
-- Reviso que contiene el archivo anterior
-- Creo una variable dinero y redirecciono el contenido del archivo billetera a dicha variable
-- Reviso que contiene mi variable
-- Hago una operación matemática con mi variable, restandole 100
-- Vuelvo a revisar el contenido de mi variable
-- Guardo el valor de mi variable al archivo billetera.txt
-- Reviso el contenido del archivo billetera.txt

c:\Users\EdSon\Desktop>echo 500 > billetera.txt

c:\Users\EdSon\Desktop>type billetera.txt
500

c:\Users\EdSon\Desktop>set /p dinero=<billetera.txt

c:\Users\EdSon\Desktop>set dinero
dinero=500

c:\Users\EdSon\Desktop>set /a dinero= dinero - 100
400
c:\Users\EdSon\Desktop>set dinero
dinero=400

c:\Users\EdSon\Desktop>echo %dinero% > billetera.txt

c:\Users\EdSon\Desktop>type billetera.txt
400

c:\Users\EdSon\Desktop>


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Nucleorion en 14 Mayo 2019, 11:26 am
Que recopilación tan buena! Gracias!


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Mr. Bit en 15 Mayo 2019, 01:07 am
Gracias EdePC!

Lo que pasa es que yo no se muchas cosas de Batch, como ya he dicho anteriormente. No se como crear una Variable en Batch.

También, y como me pasaba con Pawno (programa mencionado en el post), no se EXACTAMENTE como funcionan las Variables o para que sirven.
Si pueden decirme como crear una en Batch y explicarme de manera sencilla y clara que es una Variable, se los agradecería un montón.

Gracias de vuelta y espero sus respuestas!  ;D


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Nucleorion en 15 Mayo 2019, 10:19 am
La pregunta es bastante basica y generica. Como casi nunca puedo responder a las preguntas complejas aprovechare para hacer mi aportación, y aunque mis conocimientos son limitados si que tengo mucha practica en iniciar a la gente en la programación en mi trabajo. La explicación te servira para cualquier lenguaje de programación, aunque en el ejemplo usaremos batch tal y como preguntas en el asunto. Voy a suponer tambien que has buscado por internet y no has comprendido las respuestas.

Una variable es un lugar donde guardar datos. Imaginemos que quieres hacer un programa que le diga al usuario cuantos dias cumple el dia de su cumpleaños (imaginando para simplificar que todos los años tienen 365 dias). Nuestro programa tendrá que multiplicar los años por los dias del año, pero como los años que tiene el usuario pueden variar le preguntaremos al usuario y los almacenamos en una variable que en este caso le llamaremos aniosusuario.

Crear una variable y darle un valor se hace asi:
Código
  1. set dias=365
Aunque en este caso el valor no varie tiene ciertas ventajas usar variables aquí tambien.

Y para preguntar al usuario cuantos años tiene y almacenar el valor en una variable para operar con ella seria asi:
Código
  1. set /p aniosusuario=Cuantos años has cumplido hoy?

Aqui el programa completo:
Código
  1. @echo off
  2. :inicio
  3. cls
  4. set /p aniosusuario=Cuantos años has cumplido hoy?
  5. set dias=365
  6. set /a resultado=%aniosusuario% * %dias%
  7. echo tienes %resultado% dias
  8. goto inicio

Aqui el programa comentando lo que hace cada linea:
Código
  1. @echo off
  2.  
  3. REM Ponemos REM para crear un comentario, no tiene incidencia en el programa, es solo para guia del programador
  4.  
  5. REM Ponemos una etiqueta llamada inicio para que cuando acabe el programa con goto vuelva a inicio y comience de nuevo
  6. :inicio
  7.  
  8. REM con cls borramos la pantalla cada vez
  9. cls
  10.  
  11. REM Preguntamos al usuario cuantos años tiene y lo guardamos en la variable años que creamos con set
  12. set /p aniosusuario=Cuantos años has cumplido hoy?
  13.  
  14. REM creamos la variable dias y le asignamos el valor
  15. set dias=365
  16.  
  17. REM para operar con las variables creadas ponemos % al principio y al final de la variable
  18. set /a resultado=%aniosusuario% * %dias%
  19.  
  20. REM aqui mostramos el resultado intercalando el texto con la variable poniendo tambien %
  21. echo tienes %resultado% dias
  22.  
  23. REM paramos el programa para que el usuario pueda ver el resultado hasta que pulse una tecla
  24.  
  25. REM volvemos al punto de partida que está en la etiqueta inicio
  26. goto inicio

Consideraciones a tener en cuenta:
Los valores almacenados en las variables se destruyen al cerrar el programa o al recalcular o reasignar los valores.
Los lenguajes de programación no suelen operar internamente con ñ ni acentos por lo que no los usaremos.

PD:
Código
  1. En la previsualizacion, porque la escribir años aparece asi: a& # 241;os y al escribir  a n i o s  aparece asi: años?
  2.  
  3. Bueno se descompone todo al guardar y luego al previsualizar se vuelve a descomponer asi que no se si se me entendera
  4.  


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Mr. Bit en 16 Mayo 2019, 03:01 am
Muchas gracias! En serio!

Si, eso de los "%ejemplo%", lo de "set /p" y todo lo basico me lo se. No sabia como crear una variable, pero ahora si me ha quedado claro gracias a ti!

Una pregunta: ¿Que puedo colocar en el Valor de una variable?

set variable=(Aquí que puedo colocar)


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Nucleorion en 16 Mayo 2019, 08:57 am
numeros y letras.

Ahora con lo aprendido haz pruebas y vete haciendo versiones del programa. Por ejemplo que te pregunte tu nombre y luego que te diga pepito tiene 10526 dias. Si guardas las versiones con nombres diferentes no vas a romper ni perder nada por hacer todas las pruebas que quieras.



Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Mr. Bit en 18 Mayo 2019, 00:42 am
Gracias! Y dime ¿Las variables deben ser escritas al principio del codigo o en donde se escriba no afecta nada?


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Nucleorion en 20 Mayo 2019, 09:22 am
en batch basta con crearlas antes de usarlas


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Eleкtro en 20 Mayo 2019, 21:03 pm
De por si, lo primero que en mi opinión cualquier persona te debería aconsejar, es usar cualquier otro lenguaje distinto a Batch. Tienes VisualBasicScript y PowerShell nativamente soportados en Windows, siendo ese último infinitamente más sofisticado (y no por ello más dificil de usar) que los dos anteriores.

Aparte, la manipulación de un archivo local con la única finalidad de almacenar 1 valor, lo veo completamente engorroso e innecesario. En otros casos y para otros lenguajes podría ser razonable, desde luego, mediante la serialización de objetos o a pelo escribiendo en un archivo de texto plano de inicialización (.ini), pero estamos hablando de Batch, y crear dependencias de archivos de texto plano para almacenar un único valor...
En su lugar, puedes manipular una variable de entorno. O como alternativa, manipular directamente una entrada en el registro de Windows. Esto último es tedioso hacerlo en Batch por que dependes de un programa externo (como para casi todo lo demás), REG.EXE para poder realizar operaciones de lectura y escritura en el registro. Te recomiendo cualquier otro lenguaje, insisto.

Por último, te muestro un ejemplo de batch-script utilizando una variable de entorno personalizada en la que puedes almacenar un valor de forma permanente...

Código
  1. @ECHO OFF
  2.  
  3. :: Nombe de variable de entorno a definir en el sistema.
  4. SET "envVarName=GLOBAL_MONEY"
  5.  
  6. :: Obtener valor actual de variable de entorno.
  7. FOR /F "TOKENS=3 DELIMS=^ " %%# in (
  8. 'REG QUERY "HKCU\Environment" ^| FINDSTR /I "\<%envVarName%\>"'
  9. ) DO (
  10. SET /A "CURRENT_MONEY=%%#"
  11. )2>NUL
  12. ECHO.Valor actual: %CURRENT_MONEY%
  13.  
  14. :: Añadir $500
  15. SET /A "CURRENT_MONEY=%CURRENT_MONEY%" + 500
  16. ECHO.Valor nuevo: %CURRENT_MONEY%
  17.  
  18. :: Guardar los cambios en la variable de entorno.
  19. (SETX "%envVarName%" "%CURRENT_MONEY%")1>NUL
  20.  
  21. EXIT /B 0



Por cierto, yo también publiqué una guía de aprendizaje de Batch:
  • Tutorial extendido de aprendizaje Batch - por ElektroStudios (https://foro.elhacker.net/scripting/tema_bloqueado_hasta_finalizar_el_tuto_tutorial_extendido_de_aprendizaje_batch-t375135.0.html;msg1797907#msg1797907)
...pero no me apateció acabarlo por desmotivación.

Saludos.


Título: Re: [Ayuda] Guardar Información en Batch
Publicado por: Nucleorion en 21 Mayo 2019, 09:07 am
Madre mia, pedazo de guía!! Muchas gracias Elektro