Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: SuperDraco en 18 Marzo 2011, 07:12 am



Título: (SOLUCIONADO) [ Batch ] Problemilla con variable Set /a...
Publicado por: SuperDraco en 18 Marzo 2011, 07:12 am
hola, ya tengo otro problema que me trae de cabeza :S les recorto el trozo que interesa, del script:

Código
  1. Set Num=0
  2.  
  3. blabla... ...& findstr blablabla & call :proceso
  4.  
  5. :proceso
  6. IF %ERRORLEVEL% EQU 0 set /a num+=1 & blablabla lo que sigue...
  7.  
  8. :Terminar
  9. set /a num+=6 & mode con lines=%num%
  10.  
... pero el número siempre es "1", y no se porque.


Así que para probar, hice esto:
Código:
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...


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: leogtz en 18 Marzo 2011, 09:18 am
Si pudieras poner todo el trozo de código, y más si estás dentro de un loop FOR.


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: SuperDraco en 18 Marzo 2011, 13:53 pm
Uf, es que si lo pongo todo va a ser un lio, ya sabes que soy d malas costumbres xDDD,

Ahí va:

Código
  1. @echo off
  2. Mode con cols=60 lines=18
  3. Set Lista=%Temp%\Lista.txt
  4. Set Num=0
  5.  
  6.  
  7. :BUSCAR
  8. for /f "tokens=*" %%a in ('dir /B *.mp3') do cls & set nombre=%%a & mediainfo "%%a" "--Inform=General;%%BitRate%%" | findstr "2..... 3....." >nul & call :MP3
  9.  
  10.  
  11. :TERMINAR
  12. cls
  13. 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
  14. If not exist %lista% mode con lines=3 cols=65 & echo+ No se ha encontrado ningun audio superior a +160 kbps.  & sleep 3 & exit
  15.  
  16. :MP3
  17. 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)


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: leogtz en 19 Marzo 2011, 00:04 am
Código
  1. @echo off
  2. Mode con cols=60 lines=18
  3. Set Lista=%Temp%\Lista.txt
  4. Set Num=0
  5.  
  6.  
  7. :BUSCAR
  8. for /f "tokens=*" %%a in ('dir /B *.mp3') do (
  9. cls
  10. set nombre=%%a
  11. mediainfo "%%a" "--Inform=General;%%BitRate%%" | findstr "2..... 3....." >nul
  12. call :MP3
  13. )
  14.  
  15.  
  16. :TERMINAR
  17. cls
  18. If exist %lista% (
  19. set num2=%num%
  20. set /a num2+=6
  21. mode con lines=%num2%
  22. echo+ Se han convertido correctamente %num% audios..."
  23. type %lista%
  24. del /q %lista%
  25. )
  26.  
  27. If not exist %lista% (
  28. mode con lines=3 cols=65
  29. echo+ No se ha encontrado ningun audio superior a +160 kbps.
  30. sleep 3
  31. )
  32.  
  33. :MP3
  34. IF %ERRORLEVEL% LEQ 0 (
  35. cls
  36. set /a num+=1
  37. echo+ %nombre%>> %lista%
  38. coreconverter.exe -infile="%nombre:~0,-5%.mp3" -outfile="%nombre:~0,-5%.mp3" -convert_to="mp3 (Lame)" -b 160
  39. goto:eof
  40. )

Es tu código, pero poniendo cada sentencia en una línea.


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: SuperDraco en 19 Marzo 2011, 07:27 am
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
  1. :END
  2.  
  3. set Num2=%num%
  4. Set /a Num2+=4
  5.  
  6. If exist %lista% (
  7. cls
  8. mode con lines=%num2% & %Centrar%
  9. color 2 & echo+
  10. Colous writesec "[7] Se han convertido correctamente [2]%num%[7] audios..." & echo+
  11. FART.exe -q %lista% \" --remove
  12. type %lista%
  13. del /q %lista%
  14. )


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: SuperDraco en 19 Marzo 2011, 09:37 am
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:

Código:
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?:

Código:
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%"?


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: xassiz~ en 19 Marzo 2011, 16:07 pm
Código
  1. for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate%%"') do set "rate=%%~%%"
  2.  
  3. echo.%rate%
  4.  
;D


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: SuperDraco en 19 Marzo 2011, 16:21 pm
Código
  1. for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate%%"') do set "rate=%%~%%"
  2.  
  3. echo.%rate%
  4.  
;D


Pero, como haría eso dentro de este for?
Código
  1. for /f "tokens=*" %%a in ('dir /B *.mp3') do (
  2. set nombre=%%a
  3. mediainfo "%%a" "--Inform=General;%%BitRate%%" | findstr "161... 162... 163... 164... 165... 166... 167... 168... 169... 17.... 18.... 19.... 2..... 3....." >nul
  4. call :MP3
  5. )

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


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: leogtz en 19 Marzo 2011, 16:55 pm
Código
  1. setlocal enabledelayedexpansion
  2.  
  3. rem Por cada mp3....
  4. for /f "tokens=*" %%a in ('dir /B *.mp3') do (
  5. set "nombre=%%a"
  6. rem Seteamos el nombre para que pueda usarse globalmente...
  7.  
  8. rem Por cada mp3 sacamos su información... es el mismo código de ~xassiz.
  9. rem No sé si funcione.
  10. rem Cuando ya tenemos seteado el "rate"
  11. for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate%%"') do set "rate=%%~%%"
  12. rem Llamamos a MP3
  13. call :MP3
  14. )
  15.  


Título: Re: [ Batch ] Problemilla con variable Set /a...
Publicado por: SuperDraco en 20 Marzo 2011, 11:40 am
Gracias a los 2, parece que ya lo he solucionado.