[BATCH] Variable dentro de for [SOLUCIONADO]

Iniciado por DameBanda, 8 Abril 2012, 15:26 PM

0 Miembros y 1 Visitante están viendo este tema.

DameBanda

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 (dos) [Seleccionar]

@echo off
set val = 5
for %%a in (A B C D E F G H I J K L M N O) do (
for /L %%A in (1,1,15) do (
echo :Host_play_cmp_%%a%%A >> code.txt
echo set VERTICAL = %val% >> code.txt
echo set START = 10 >> code.txt
echo set STOP = 14 >> code.txt
echo set RETURN = Host_play_click%%a%%A >> code.txt
echo. >> code.txt
echo :Host_play_click%%a%%A_next >> code.txt
echo if %next%=="True" set click=%%a%%A & goto sendclick >> code.txt
echo goto Host_play >> code.txt
echo. >> code.txt
set /a val=%val%+1
)
pause


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 (dos) [Seleccionar]
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.
"Amarillo, pensó" Douglas Adams




[img]http:/

Eleкtro

Hola.

- La variable VAL no se imprime porque no estás usando la sintaxis correcta para setear.
Código (dos) [Seleccionar]
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 (dos) [Seleccionar]
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 (dos) [Seleccionar]

For ... Do (
...
Call :Print
...
)

:Print
echo if ^%%next^%%==^"True^" set click=^%%^%%a^%%^%%A ^& goto sendclick >> code.txt
Goto :EOF



En resumen:

Código (dos) [Seleccionar]
@echo off
Setlocal enabledelayedexpansion
Set VAL=5

for %%a in (A B C D E F G H I J K L M N O) do (
for /L %%A in (1,1,15) do (
echo :Host_play_cmp_%%a%%A >> code.txt
echo set VERTICAL = !val! >> code.txt
echo set START = 10 >> code.txt
echo set STOP = 14 >> code.txt
echo set RETURN = Host_play_click%%a%%A >> code.txt
echo. >> code.txt
echo :Host_play_click%%a%%A_next >> code.txt
Call :Print
echo goto Host_play >> code.txt
echo. >> code.txt
set /a val+=1
)
)
Pause
Exit

:Print
Echo IF ^%%next^%%==^"True^" set click=^%%^%%a^%%^%%A ^& goto sendclick >> code.txt
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 (dos) [Seleccionar]
@Echo off
Set var=True
If %Var%==True (Echo sin comillas)
If %Var%=="True" (Echo con comillas)
pause



Salu2.








DameBanda

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

Podeis cerrar el tema
"Amarillo, pensó" Douglas Adams




[img]http:/