(SOLUCIONADO) [ Batch ] Problemilla con variable Set /a...

Iniciado por SuperDraco, 18 Marzo 2011, 07:12 AM

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

SuperDraco

hola, ya tengo otro problema que me trae de cabeza :S les recorto el trozo que interesa, del script:

Código (dos) [Seleccionar]

Set Num=0

blabla... ...& findstr blablabla & call :proceso

:proceso
IF %ERRORLEVEL% EQU 0 set /a num+=1 & blablabla lo que sigue...

:Terminar
set /a num+=6 & mode con lines=%num%

... pero el número siempre es "1", y no se porque.


Así que para probar, hice esto:
echo %num%
set num2=%num%
set /a num2+=6
echo numero nuevo:%num2%
pause

Y el resultado es esto:



¿Porque no me deja?


PD: En cambio, si repito el proceso manualmente en la consola, si que me deja, así que he pensado que el problema puede estar en los caracteres "%", pero ya he probado cambiandolos y nada...
No he vuelto, solo estoy de paso.

leogtz

Si pudieras poner todo el trozo de código, y más si estás dentro de un loop FOR.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SuperDraco

#2
Uf, es que si lo pongo todo va a ser un lio, ya sabes que soy d malas costumbres xDDD,

Ahí va:

Código (dos) [Seleccionar]
@echo off
Mode con cols=60 lines=18
Set Lista=%Temp%\Lista.txt
Set Num=0


:BUSCAR
for /f "tokens=*" %%a in ('dir /B *.mp3') do cls & set nombre=%%a & mediainfo "%%a" "--Inform=General;%%BitRate%%" | findstr "2..... 3....." >nul & call :MP3


:TERMINAR
cls
If exist %lista% set num2=%num% & set /a num2+=6 & mode con lines=%num2% & echo+ Se han convertido correctamente %num% audios..." & type %lista% & del /q %lista% & pause >nul & exit
If not exist %lista% mode con lines=3 cols=65 & echo+ No se ha encontrado ningun audio superior a +160 kbps.  & sleep 3 & exit

:MP3
IF %ERRORLEVEL% LEQ 0 cls & set /a num+=1 & echo+ %nombre%>> %lista% & coreconverter.exe -infile="%nombre:~0,-5%.mp3" -outfile="%nombre:~0,-5%.mp3" -convert_to="mp3 (Lame)" -b 160 & goto:eof



la parte que falla es el "Set /a" de la subrutina ":TERMINAR", el "Set /a" de ":MP3" funciona correctamente porque se me muestra bien la variable:


No he vuelto, solo estoy de paso.

leogtz

Código (dos) [Seleccionar]
@echo off
Mode con cols=60 lines=18
Set Lista=%Temp%\Lista.txt
Set Num=0


:BUSCAR
for /f "tokens=*" %%a in ('dir /B *.mp3') do (
cls
set nombre=%%a
mediainfo "%%a" "--Inform=General;%%BitRate%%" | findstr "2..... 3....." >nul
call :MP3
)


:TERMINAR
cls
If exist %lista% (
set num2=%num%
set /a num2+=6
mode con lines=%num2%
echo+ Se han convertido correctamente %num% audios..."
type %lista%
del /q %lista%
pause >nul
exit
)

If not exist %lista% (
mode con lines=3 cols=65
echo+ No se ha encontrado ningun audio superior a +160 kbps.
sleep 3
exit
)

:MP3
IF %ERRORLEVEL% LEQ 0 (
cls
set /a num+=1
echo+ %nombre%>> %lista%
coreconverter.exe -infile="%nombre:~0,-5%.mp3" -outfile="%nombre:~0,-5%.mp3" -convert_to="mp3 (Lame)" -b 160
goto:eof
)


Es tu código, pero poniendo cada sentencia en una línea.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SuperDraco

#4
Muchas gracias por las molestias que te tomas, Arreglar el código e instalarte el mediainfo, ya he "reescrito" todo el código a tu manera, para empezar a hacer las cosas bien xD...

Pero bueno, vayamos al tema, ¿que puedo hacer con el problema del "Set /A"?

saludos!


EDITO: Ya lo he solucionado, no funcionaba porque estaba dentro del "IF" (No se porque...) pero al dejarlo afuera, ya me va perfecto:


Código (dos) [Seleccionar]
:END

set Num2=%num%
Set /a Num2+=4

If exist %lista% (
cls
mode con lines=%num2% & %Centrar%
color 2 & echo+
Colous writesec "[7] Se han convertido correctamente [2]%num%[7] audios..." & echo+
FART.exe -q %lista% \" --remove
type %lista%
del /q %lista%
pause >nul
exit
)
No he vuelto, solo estoy de paso.

SuperDraco

#5
Aún tengo que probar el método que me dijiste con "findstr", pero como de momento el mio creo que no da fallos, antes de probar el tuyo quiero ir por partes y terminar una cosa que aún llevo mal, se trata de esto:

mediainfo "%%a" "--Inform=General;%%BitRate%%"



Como puedo pasar el valor que me da ese comando (El número 320000), a una variable, para "jugar" con ella por ejemplo así dentro de mi script?:

For /f... blablabla...mediainfo "%%a" "--Inform=General;%%BitRate%%" > %rate% & goto :xxx

:xxx
echo Convirtiendo el archivo: %%a
echo Bitrate del archivo original: %rate%


He estado probando con "set /p" y "set" pero no consigo hacerlo...

¿Como creo la variable "rate" para luego guardar el numero en esa variable y poder usarlo como "echo %rate%"?
No he vuelto, solo estoy de paso.

xassiz~

Código (dos) [Seleccionar]

for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate%%"') do set "rate=%%~%%"

echo.%rate%

;D

SuperDraco

#7
Cita de: ~xassiz en 19 Marzo 2011, 16:07 PM
Código (dos) [Seleccionar]

for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate%%"') do set "rate=%%~%%"

echo.%rate%

;D


Pero, como haría eso dentro de este for?
Código (dos) [Seleccionar]

for /f "tokens=*" %%a in ('dir /B *.mp3') do (
set nombre=%%a
mediainfo "%%a" "--Inform=General;%%BitRate%%" | findstr "161... 162... 163... 164... 165... 166... 167... 168... 169... 17.... 18.... 19.... 2..... 3....." >nul
call :MP3
)


Necesito meterlo dentro de ese for...
Se podría mezclar mi FOR con tu FOR???
Es que, como está el "findstr" de por medio, me parece algo imposible para mi...

Gracias de todas formasss por la ayuda
No he vuelto, solo estoy de paso.

leogtz

Código (dos) [Seleccionar]
setlocal enabledelayedexpansion

rem Por cada mp3....
for /f "tokens=*" %%a in ('dir /B *.mp3') do (
set "nombre=%%a"
rem Seteamos el nombre para que pueda usarse globalmente...

rem Por cada mp3 sacamos su información... es el mismo código de ~xassiz.
rem No sé si funcione.
rem Cuando ya tenemos seteado el "rate"
for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate%%"') do set "rate=%%~%%"
rem Llamamos a MP3
call :MP3
)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SuperDraco

Gracias a los 2, parece que ya lo he solucionado.
No he vuelto, solo estoy de paso.