elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Variable dentro de for [SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Variable dentro de for [SOLUCIONADO]  (Leído 1,647 veces)
DameBanda

Desconectado Desconectado

Mensajes: 65


Hollywood Whore


Ver Perfil
[BATCH] Variable dentro de for [SOLUCIONADO]
« en: 8 Abril 2012, 15:26 pm »

Hola a todos, estoy haciendo un juego en batch (nada complicado) y me surgio la siguiente duda:

Para el juego necesito crear un tablero con 225 zonas pulsables (botones) y a unas 15  lineas por boton, pues. os haceis una idea, asi que decidí crear un script que genere el código, de momento tengo esto:

Código
  1. @echo off
  2. set val = 5
  3. for %%a in (A B C D E F G H I J K L M N O) do (
  4. for /L %%A in (1,1,15) do (
  5. echo :Host_play_cmp_%%a%%A >> code.txt
  6. echo set VERTICAL = %val% >> code.txt
  7. echo set START = 10 >> code.txt
  8. echo set STOP = 14 >> code.txt
  9. echo set RETURN = Host_play_click%%a%%A >> code.txt
  10. echo. >> code.txt
  11. echo :Host_play_click%%a%%A_next >> code.txt
  12. echo if %next%=="True" set click=%%a%%A & goto sendclick >> code.txt
  13. echo goto Host_play >> code.txt
  14. echo. >> code.txt
  15. set /a val=%val%+1
  16. )
  17.  

El resultado es el que debería, a excepción de que no imprime el contenido de la variable VAL y se salta la linea
Código
  1. if %next%=="True" set click=%%a%%A & goto sendclick

Si alguien sabe como hacer que imprima lo que falta o porque no lo hace, pues le estaría tremendamente agradecido  :D

Salu2 y gracias adelantadas.


« Última modificación: 8 Abril 2012, 18:26 pm por DameBanda » En línea

"Amarillo, pensó" Douglas Adams




[img]http:/
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [BATCH] Variable dentro de for
« Respuesta #1 en: 8 Abril 2012, 17:45 pm »

Hola.

- La variable VAL no se imprime porque no estás usando la sintaxis correcta para setear.
Código
  1. Set VAL=5
(Sin espacios)

PD: Además necesitás expandir la variable en ese  FOR.


- La linea se la "salta" porque no estás escapando los caracteres especiales...

Código
  1. echo if ^%%next^%%==^"True^" set click=^%%^%%a^%%^%%A ^& goto sendclick >> code.txt

De todas formas no te va a funcionar si no modificas un poco el code.
Está en una zona complicada (dentro de un FOR), Así que en vez de imprimir "%%a" imprimirá el contenido de la variable (A, B, C...) en el archivo de texto.
O con un call para salir del FOR y escribir esa linea.

Código
  1. For ... Do (
  2. ...
  3. Call :Print
  4. ...
  5. )
  6.  
  7. :Print
  8. echo if ^%%next^%%==^"True^" set click=^%%^%%a^%%^%%A ^& goto sendclick >> code.txt
  9. Goto :EOF


En resumen:

Código
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. Set VAL=5
  4.  
  5. for %%a in (A B C D E F G H I J K L M N O) do (
  6. for /L %%A in (1,1,15) do (
  7. echo :Host_play_cmp_%%a%%A >> code.txt
  8. echo set VERTICAL = !val! >> code.txt
  9. echo set START = 10 >> code.txt
  10. echo set STOP = 14 >> code.txt
  11. echo set RETURN = Host_play_click%%a%%A >> code.txt
  12. echo. >> code.txt
  13. echo :Host_play_click%%a%%A_next >> code.txt
  14. Call :Print
  15. echo goto Host_play >> code.txt
  16. echo. >> code.txt
  17. set /a val+=1
  18. )
  19. )
  20.  
  21. :Print
  22. Echo IF ^%%next^%%==^"True^" set click=^%%^%%a^%%^%%A ^& goto sendclick >> code.txt
  23. Goto :EOF




Además, una cosa aparte por si no lo sabes, Asegúrate de que el contenido de la variable %Next% séa True o "True", Las comillas también cuentan.
Código
  1. @Echo off
  2. Set var=True
  3. If %Var%==True (Echo sin comillas)
  4. If %Var%=="True" (Echo con comillas)


Salu2.


En línea


DameBanda

Desconectado Desconectado

Mensajes: 65


Hollywood Whore


Ver Perfil
Re: [BATCH] Variable dentro de for
« Respuesta #2 en: 8 Abril 2012, 18:25 pm »

Gracias por responder tan rápido Elektro, ya conseguí solucionar el problema
 ;D

Podeis cerrar el tema
En línea

"Amarillo, pensó" Douglas Adams




[img]http:/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines