hola, ya tengo otro problema que me trae de cabeza :S les recorto el trozo que interesa, del script:
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:
(http://img821.imageshack.us/img821/4623/prtscrcapturem.jpg)
¿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...
Si pudieras poner todo el trozo de código, y más si estás dentro de un loop FOR.
Uf, es que si lo pongo todo va a ser un lio, ya sabes que soy d malas costumbres xDDD,
Ahí va:
@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:
(http://img12.imageshack.us/img12/9284/prtscrcapture3z.jpg)
@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.
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:
: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
)
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%%"
(http://img839.imageshack.us/img839/9128/prtscrcapturez.jpg)
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%"?
for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate%%"') do set "rate=%%~%%"
echo.%rate%
;D
Cita de: ~xassiz en 19 Marzo 2011, 16:07 PM
for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate%%"') do set "rate=%%~%%"
echo.%rate%
;D
Pero, como haría eso dentro de este for?
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
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
)
Gracias a los 2, parece que ya lo he solucionado.