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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Batch: For X do (varios comandos)... No me esta funcionando...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Batch: For X do (varios comandos)... No me esta funcionando...  (Leído 5,652 veces)
‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Batch: For X do (varios comandos)... No me esta funcionando...
« en: 18 Noviembre 2008, 05:08 am »

Hola, que tal:

Antes que nada, disculpen la pregunta tan "basica" que hago, que pareciera que no he leido ni buscado nada.

El problema radica en lo siguiente:

for /L %%x in (#, #, #) do (
comando
comando
)

Llevo dias y dias buscando, en google, en un buen de paginas. Aqui, en la sección de programacion->scripting, ya me eche casi las 18 pags (con sus links y sus paginas del tema), buscando todo lo relacionado con batch y el comando for, pero no he encontrado la solución  >:(.

Por otro lado, tengo un poco de conocimiento en javascript, vb, macros en excel, y empece con C. No lo digo como presumiendo, porque no tengo el nivel de conocimiento que tienen aqui, sino que como es posible que teniendo un poco de practica y conocimiento, esté batallando con esto  >:(  >:(.

El primer ejemplo con el que estoy batallando es el siguiente:
@echo off
cls
for /L %%c in (0, 1, 7) do (
color %%c
echo hola%%c
)
pause > nul
cls


(digo, este ejemplo puede sonar muy tonto, pero de esta estructura parto para realizar un script que me interesa hacer)

Segun yo, en el primer bucle (for), el color es 0, e imprime hola con tal color, no? Luego, el color es 1, e imprime hola con el color correspondiente a color 1, cierto?
Pero solo me muestra hola1, hola2, hola3, etc con el mismo color.
Por que rayos no me funciona? que estoy haciendo mal?  :P

Pongo otro ejemplo, con el mismo problema:

@echo off
set x=0
for /L %%c in (1, 1, 8) do (
set /a x=%x%+1
echo %x%
)
pause > nul
cls


Primero x vale 0. Entra al for y x, que vale 0, es igual a 0 + 1, y debería valer ahora 1, mostrando 1 (segun yo). Luego pasa al siguiente bucle (for) (por asi decirlo) y ahora x que vale 1, es igual a 1 + 1, mostrando 2, si me estoy explicando?
Pero lo que me muestra son puros ceros.

Donde esta el problema? esta mal la estructura? no se puede escribir de esa forma?
Igual podría pensar en una solución alternativa, con :menus y demas, pero esa no es la idea.

Alguien tiene alguna solución?

Gracias  ;D

Saludos


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Batch: For X do (varios comandos)... No me esta funcionando...
« Respuesta #1 en: 18 Noviembre 2008, 17:00 pm »

Hola, bueno debo confesaro que no lei todo el post, pero aver si te sirve esto :
Código:
@echo off
for /L %%c in (0, 1, 7) do (
ping -n 1 127.0.0.1>nul
color %%c
echo hola%%c
)
pause > nul
cls

El problema era la velocidad con la que se ejecutaba.


Pongo otro ejemplo, con el mismo problema:

@echo off
set x=0
for /L %%c in (1, 1, 8) do (
set /a x=%x%+1
echo %x%
)
pause > nul
cls


Primero x vale 0. Entra al for y x, que vale 0, es igual a 0 + 1, y debería valer ahora 1, mostrando 1 (segun yo). Luego pasa al siguiente bucle (for) (por asi decirlo) y ahora x que vale 1, es igual a 1 + 1, mostrando 2, si me estoy explicando?
Pero lo que me muestra son puros ceros.

Te muestra puros ceros, por que en ningun momento estas involucrando al for, es decir nunca estas sumando + 1, solo + 0.

Código:
@echo off
set x=0
for /L %%c in (1, 1, 8) do (
set /a x+=1
)
echo %x%
pause > nul
cls

Mira esta otra forma :
Código:
@ECHO OFF
SET /A I=0
:BUCLE
SET /A I+=1
ECHO %I%
IF %I%==10 (
GOTO:END
) ELSE (
GOTO:BUCLE
)
:END
ECHO:VALOR %I%
PAUSE > NUL
(
EL VALOR SE VA AGREGANDO EN 1
Y CUANDO LLEGA A 10 SALTA A LA ETIQUETA :END Y MUESTRA EL VALOR.


« Última modificación: 18 Noviembre 2008, 17:13 pm por Leo Gtz. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Batch: For X do (varios comandos)... No me esta funcionando...
« Respuesta #2 en: 19 Noviembre 2008, 08:31 am »

Hola amigo:

Te agradezco por tomarte el tiempo de responder  :D

Para la solución que me diste con el color, lo mas seguro es que tengas razon en cuanto al tiempo. El unico detalle es que me muestra todos los holas del mismo color, y mi idea es que se muestra cada hola de un color diferente.
Ahora, me pareció interesante la opcion que me diste de "ping -n 1 127.0.0.1>nul"
Lo he de probar...

En
@echo off
set x=0
for /L %%c in (1, 1, 8) do (
set /a x+=1
)
echo %x%
pause > nul
cls


Para empezar, no sabia que se podía usar x+=1, como en javascript. Buen dato  :laugh:

Perdón, pero tambien tiene unos detalles:

Sólo me muestra el resultado, y yo lo que quisiera es que se mostrara 1, 2, 3, etc, tal y como se muestra con la tercer solución que me diste.
Según yo (quiza este equivocado), con algo de practica que tengo, creo que no esta mal la estructura que escribo en
@echo off
set x=0
for /L %%c in (1, 1, 8) do (
set /a x=%x%+1
echo %x%
)
pause > nul
cls

solo que no entiendo por qué no funciona. No lo he probado en vb, pero creo que jalaría bien, porque como digo (y otra vez, quiza este equivocado), creo que la estructura, como la escribi, esta correcta, independiente de la forma corta o correcta de x+=#.

Por el tercer ejemplo que me das, lo he de leer con mas detenimiento ahora que venga el fin de semana y no me tenga que levantar tempra a trabajar. Me parece una buena opción, y me va a servir de mucho para ir entendiendo las estructuras de la programación batch.
Solo que me interesa mucho entender la forma de escribir y como se interpreta el for, de la forma como comento.

La idea principal de usarla como la escribo, es que quiero crear un bat que me renombre varios archivos y les ponga como nombre, los numeros, segun el for en el que se encuentre, por ejemplo, 1.jpg, 2.jpg, 3.jpg, y asi, e incluir un if para que al renombrar el 2do archivo, que quedaría nuevamente como 1.jpg, si ya existe, que lo renombre con siguiente numero.  :P

Tienes (tienen) otras ideas?
No quisiera que me dieran el codigo ya hecho, sino que me ayudaran a entender como trabaja el for en batch.

Nuevamente gracias por tu tiempo y tus comentarios Leo Gtz.  :D

Saludos a todos  ;D
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Batch: For X do (varios comandos)... No me esta funcionando...
« Respuesta #3 en: 19 Noviembre 2008, 17:06 pm »

Creo que nos estamos complicando demasiado, aquí otra forma, le agregue el ping, para hacer un pequeño retardo, y que se viera bien el aumento de numeros :

Código:
@ECHO OFF
FOR /L %%X IN (1,1,8) DO (
PING -N 1 127.0.0.1>NUL
ECHO:%%X
SET X=%%X
)
ECHO:VALOR %X%
PAUSE

Esto :
Código:
FOR /L %%I IN (1,1,8) DO (
SET /A X=%%I+1
ECHO:%X%
)

La variable X, solo despues del fin es mostrado su valor real, en el FOR no.

Usa las alternativas que te he puesto, Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Baphonet

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Re: Batch: For X do (varios comandos)... No me esta funcionando...
« Respuesta #4 en: 19 Noviembre 2008, 21:39 pm »

El problema que tienes con el bat del color es que, segun tengo entendido, es que cuando cambias el color lo cambias a todo lo que haya dentro de la consola por eso tus "holas" tendran siempre el color del ultimo numero que introduzcas.

Para poder ver uno de cada color podrias ponerlo asi:
Código:
@echo off
cls
for /L %%c in (0, 1, 6) do (
color %%c
echo hola%%c
pause > nul
cls
)

Saludos
En línea

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Batch: For X do (varios comandos)... No me esta funcionando...
« Respuesta #5 en: 30 Noviembre 2008, 22:03 pm »

Hola, como estan:

Primero que nada, una disculpa por no haber regresado durante semana y media, ni siquiera para agradecer su tiempo y sus respuestas  :-[, pero el trabajo ha estado muy pesado y no tengo hora de salida.

Asi que, agradezco sus respuestas y en tan poco tiempo  ;D.

En la cuestion del color Baphonet, no lo habia pensado, pero claro que tiene mucha logica. El color se aplica a toda la pantalla o texto.

Leo Gtz., me parecen muy buenas tus alternativas, de hecho estoy leyendo todos los tutoriales de batch que posteas, lo que ocurre es que tengo un concepto de como se "debería" usar el for (por ejemplo), y en batch, rompe con ese concepto.  :-\

Por lo mismo tengo otra duda que quiza aplique lo mismo que me comentas ("La variable, solo despues del fin es mostrado su valor real, en el FOR no."):

@echo off
set n=0
for %%a in (*.txt) do set /a n+=1
echo %n%
pause > nul

Solo muestra el valor 7 (que son los 7 archivos de texto que tengo en esa carpeta).
No muestra 1, 2, 3, etc.
Se aplica lo mismo que me dices, cierto?

En:

@echo off
set n=1
:menu
if %n% LEQ 10 (
echo Vale %n%
pause > nul
set /a n+=1
echo Ahora vale %n%
pause > nul
goto :menu
)

Mi idea es que primero se mostrara
"Vale 1"
y luego
"Ahora vale 2"

Pero lo que se muestra es:
Vale 1
Ahora vale 1
Vale 2
Ahora vale 2

Siento molestarlos con cosas, para ustedes ya muy sencillas y entendidas, pero aunque me estoy esforzando por aprender, me estoy topando con este lenguaje.

Me podrían dar nuevamente alguna idea o alternativa de como sería la estructura correcta para realizar esto  :-[

Gracias  :D
Saludos
En línea

Baphonet

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Re: Batch: For X do (varios comandos)... No me esta funcionando...
« Respuesta #6 en: 2 Diciembre 2008, 17:08 pm »

No hace falta que te disculpes, creo que todo el mundo debe enterder que todos tenemos nuestros problemas y no siempre podemos disponer del  tiempo que quisieramos para gastar en este mundillo que tanto nos apasiona.

En cuanto a tu codigo no salia como tu querias porque en los if y for las variables locales se calculan al inicio y no se modifican hasta el final de la agrupacion de instrucciones. Al principio la n vale 1 pero no cambia el valor a 2 hasta el final del if, por ello ambas instrucciones echo valen igual.

Lo he puesto asi para que funcione aunque seguro que hay mas posibilidades:
Código:
set n=1
:menu
if %n% EQU 10 (
goto :fin
)
echo Vale %n%
pause > nul
set /a n=%n%+1
echo Ahora vale %n%
pause > nul
goto :menu
:fin

Saludos
En línea

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Batch: For X do (varios comandos)... No me esta funcionando...
« Respuesta #7 en: 7 Diciembre 2008, 05:57 am »

Vientos amigo, muchas gracias.

Mas o menos me ha caido el 20, de como se estructura en batch. A ver que dudas me surgen ahora (que van a ser muchas seguramente), en los nuevos ejercicios que se me ocurran.

Pues aqui seguimos...  :laugh:

Un saludo  :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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