Suma de variables dentro de bucle for en .bat

Iniciado por franfis, 9 Marzo 2014, 00:08 AM

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

franfis

Hola  ;D amigos necesito de vuestra ayuda, tengo este 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

tornoman

#1
Ejemplo de un contador:

Código (dos) [Seleccionar]
@ echo off

set numero =1

:arriba
set /a numero=numero +1

   rem aca va lo que uqeres hacer este contador va a hasta 45.

if %numero% equ 45 goto final
if %numero% lss 45 goto arriba

:final
exit



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 (dos) [Seleccionar]
id3 -1 -2 -t "5.%%x" "%m%_PISTA.mp3"

a lo cual en la primer vuelta sería:

Código (dos) [Seleccionar]
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 (dos) [Seleccionar]
%%X = 1

m = %%X + %numero%

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

for %%a in (c: d: e: f: g: h: i: j: k: s: t: u: v: w: x: y: z:) do (

      if exist %%a (
               echo hola existe la unidad %%a
              echo Aca guardaremos un txt diciendo esta oración en la unidad >> %%a\existencia.txt
              )
)

¿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é.

Eleкtro

#2
Cita de: franfis en  9 Marzo 2014, 00:08 AMesa 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 (dos) [Seleccionar]
@Echo OFF & title Primer programa

Set /A "Numero=31"

For /L %%X in (1, 1, 13) Do (

Set /A "Numero+=1"
Call Start /W "ID3 Maass Tagger" "id3.exe" -1 -2 -t "5.%%X" "%%Numero%%_PISTA.mp3"

)

Pause&Exit


Saludos








franfis

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

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 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

Eleкtro

#4
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








franfis

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:
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:
id3 -1 -2 -t "hola" "36_PISTA.mp3" permanecen.

Por eso me es necesario hacer funcionar la segunda forma en el bucle

Eleкtro

#6
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:
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








franfis

La situación esta de mal en peor  :rolleyes: probé:
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.