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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Suma de variables dentro de bucle for en .bat
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Suma de variables dentro de bucle for en .bat  (Leído 13,577 veces)
franfis

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Suma de variables dentro de bucle for en .bat
« en: 9 Marzo 2014, 00:08 am »

Hola  ;D amigos necesito de vuestra ayuda, tengo este código:

Código:
@echo off
echo title Primer programa
set numero=31
for /L %%x in (1,1,13) do (
SET /a m = %%x + %numero%
id3 -1 -2 -t "5.%%x" "%m%_PISTA.mp3"
)pause
exit

lo que estoy tratando de hacer es:

id3 -1 -2 -t "5.1" "32_PISTA.mp3"
id3 -1 -2 -t "5.2" "33_PISTA.mp3"
id3 -1 -2 -t "5.3" "34_PISTA.mp3"

id3 -1 -2 -t "5.13" "44_PISTA.mp3"

Como se realiza esa suma?, si no fuera una variable del bucle seria facil pero esa variable %%x del bucle me confunde y tambien "%m%_PISTA.mp3" esta bien asi?. El resultado es este:

id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
id3: no files matching _PISTA.mp3
Presione una tecla para continuar . . .

Graciasss


En línea

tornoman

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Suma de variables dentro de bucle for en .bat
« Respuesta #1 en: 9 Marzo 2014, 00:43 am »

Ejemplo de un contador:

Código
  1. @ echo off
  2.  
  3. set numero =1
  4.  
  5. :arriba
  6. set /a numero=numero +1
  7.  
  8.     rem aca va lo que uqeres hacer este contador va a hasta 45.
  9.  
  10. if %numero% equ 45 goto final
  11. if %numero% lss 45 goto arriba
  12.  
  13. :final


Sin ofender creo que el for lo estás usando mal... o sea, por lo que tengo entendido luego del in, van los elementos... o sea %%X luego pasan a ser esos elementos siendo 1, 1 y 13...

O sea es cuestión de reemplazar:

Vos tenés esto:

Código
  1. id3 -1 -2 -t "5.%%x" "%m%_PISTA.mp3"

a lo cual en la primer vuelta sería:

Código
  1. id3 -1 -2 -t "5.1" "%m%_PISTA.mp3"

Luego pasaría a ser ese 1, más la variable número, que en este caso le diste 31...

O sea sería:

Código
  1. %%X = 1
  2.  
  3. m = %%X + %numero%
  4.  
m valdría 32, así que en dónde va la variable de m saldría 32 aumentado en %%X

Espero que lo que te acabo de decir te sirva de algo, para poder entender mejor el código y tal vez puedas aplicar lo que te mande más arriba... por las dudas te muestro un for:
Código
  1. for %%a in (c: d: e: f: g: h: i: j: k: s: t: u: v: w: x: y: z:) do (
  2.  
  3.       if exist %%a (
  4.                echo hola existe la unidad %%a
  5.               echo Aca guardaremos un txt diciendo esta oración en la unidad >> %%a\existencia.txt
  6.               )
  7. )
  8.  
¿Que hace este for?, primero, dice que existe esa unidad, y lo que hace es reemplazar la variable de entorno con dicho elemento, para no tener que hacer todas las oraciones constantemente con cada letra, se simplifica de esa manera. Espero que con esto te haya servido de ejemplo y lo puedas aplicar en la práctica.

Saludos, atte: TornoMan

Cualquier duda avisame por pm y veo de ayudarte en el momento que esté.


« Última modificación: 9 Marzo 2014, 02:35 am por tornoman » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Suma de variables dentro de bucle for en .bat
« Respuesta #2 en: 9 Marzo 2014, 00:53 am »

esa variable %%x del bucle me confunde

'%%x' es la variable que toma el 'For' para asignar el valor del Rango numérico en el ciclo.

La variable empezará siendo un '1', luego se le asignará un '2', y así sucesívamente hasta llegar a '13' y salir del Loop.

El siguiente código que te muestro, produce el resultado que mencionaste:



Código
  1. @Echo OFF & title Primer programa
  2.  
  3. Set /A "Numero=31"
  4.  
  5. For /L %%X in (1, 1, 13) Do (
  6.  
  7. Set /A "Numero+=1"
  8. Call Start /W "ID3 Maass Tagger" "id3.exe" -1 -2 -t "5.%%X" "%%Numero%%_PISTA.mp3"
  9.  
  10. )
  11.  
  12. Pause&Exit

Saludos
« Última modificación: 9 Marzo 2014, 01:01 am por Eleкtro » En línea



franfis

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Suma de variables dentro de bucle for en .bat
« Respuesta #3 en: 9 Marzo 2014, 02:15 am »

Gracias a ambos.
Hey Eleкtro el codigo que pones funciona perfecto pero me dejo con una inquietud:

Código:
Call Start /W "ID3 Maass Tagger" "id3.exe" -1 -2 -t "5.%%X" "%%Numero%%_PISTA.mp3"
Esta linea, por que no simplemente así id3 -1 -2 -t en vez de Call Start /W "ID3 Maass Tagger" "id3.exe" -1 -2 -t .

Esta forma
Código:
id3 -1 -2 -t "hola" "36_PISTA.mp3"
por ejemplo me funciona bien, sin estar dentro de un bucle pero en el bucle no.

Saludos y gracias otra vez
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Suma de variables dentro de bucle for en .bat
« Respuesta #4 en: 9 Marzo 2014, 03:06 am »

Los parámetros del comando 'Start' los puedes quitar si prefieres, pero, lo usé porque es más práctico para customizar la ejecución de un proceso.

El 'Call' es complétamente necesario para expandir la variable '%%Numero%%', la cual, como puedes ver, lleva 2 pares de '%'.
O usas 'Call', o usas Setlocal EnableDelayedExpansion.

· EnableDelayedExpansion | SS64.com
· Call | SS64.com

Saludos
« Última modificación: 9 Marzo 2014, 03:10 am por Eleкtro » En línea



franfis

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Suma de variables dentro de bucle for en .bat
« Respuesta #5 en: 9 Marzo 2014, 03:10 am »

No se si ponerlo en otro post pero sucede algo muy curioso  :o. que cuando reprodusco los audios con metadato titulo cambiado por esta forma:
Código:
Call Start /W "ID3 Maass Tagger" "id3.exe" -1 -2 -t "5.%%X" "%%Numero%%_PISTA.mp3"
O manualmente, a los dos segundos se regresa al metadato que tenia anteriormente(lo observe en windows media). Revisando manualmente todo esta correcto(es decir com click derecho...)

En cambio aquellos que lo hice con esta linea:
Código:
id3 -1 -2 -t "hola" "36_PISTA.mp3"
permanecen.

Por eso me es necesario hacer funcionar la segunda forma en el bucle
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Suma de variables dentro de bucle for en .bat
« Respuesta #6 en: 9 Marzo 2014, 04:09 am »

Hombre, los metadatos no cambian por si solos, y algo leí hace mucho tiempo sobre que Windows Media Player modifica los metadatos de los audios sin previo aviso ...cuando este considera necesario actualizarlos (otra de las grandes ideas desagradables por parte de Microsoft).

¿ Probaste con otro reproductor, por ejemplo ...Winamp ?

Las dos lineas de código que muestras hacen exáctamente lo mismo, y me apostaría todo lo que tengo a que el problema es este (solo es una suposición):

En la primera linea, osea en el For, le das como título a las canciones un número seguido de un punto y más números "5.XX",
los (pesados) algoritmos de Windows Media Player segúramente escanearán el título de la canción y determinarán que ese tipo de título (número seguido de un punto) se trata de un título sin formatear, a continuación, se enciende una bombillita que dice: "he, vamos a cambiarle el título a esto sin avisarle al usuario, seguro que nos lo agradecerá :D!"

En cambio, esto no te sucede en la segunda linea que muestras porque el título de la canción que le estás asignando al archivo ("hola") es normal, WMP lo considera un título formateado corréctamente, y entonces no hay motivo para que WMP quiera actualizar los tags.

Como no estoy muy seguro de si ese será el problema, puedes hacer la prueba asignando manualmente ese tipo de título a una canción, y abrirla en el WMP para salir de dudas:
Código:
id3 -1 -2 -t "5.1" "36_PISTA.mp3"

En resumen, y suponiendo que ese sea el problema: O le asignas títulos normales a las canciones (que no empiecen por un número seguido de un punto), o desactivas la maravillosa opción de actualizar los metadatos en el WMP.

Saludos
« Última modificación: 9 Marzo 2014, 04:28 am por Eleкtro » En línea



franfis

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Suma de variables dentro de bucle for en .bat
« Respuesta #7 en: 9 Marzo 2014, 16:30 pm »

La situación esta de mal en peor  :rolleyes: probé:
Código:
id3 -1 -2 -t "5.1" "36_PISTA.mp3"
id3 -1 -2 -t "otracosa" "36_PISTA.mp3"
Ambas lineas por separado por supuesto y windows media lo cambia a los dos segundos devolviendolo a "hola" el que quedo cuando sí me dejo ponerlo. Haré mas pruebas mas tarde. Ahh lo probé en videolan y no lo cambia.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Suma de variables dentro de bucle for en .bat
« Respuesta #8 en: 9 Marzo 2014, 16:50 pm »

· How can I stop Windows/WMP from messing with my MP3 metadata?

Citar
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Variables dentro de variables (batch)
Scripting
MK-Ultra 8 7,858 Último mensaje 6 Febrero 2008, 23:18 pm
por GUN$
variables en un Bucle
Programación Visual Basic
TheGhost(Z) 5 3,295 Último mensaje 24 Mayo 2010, 15:24 pm
por TheGhost(Z)
Consulta con suma de variables.
ASM
Zinc 3 3,871 Último mensaje 11 Junio 2010, 22:49 pm
por Eternal Idol
[BATCH] ¿Como puedo meter variables dentro de variables?
Scripting
Meine programmen 1 4,133 Último mensaje 24 Marzo 2012, 16:48 pm
por Eleкtro
problema al asignar variables dentro un bucle
Scripting
wcordero 3 3,011 Último mensaje 19 Agosto 2013, 01:00 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines