[Ayuda] Se queda sin valor la variable

Iniciado por sabeeee, 9 Diciembre 2014, 22:43 PM

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

sabeeee

Muchas gracias por visitar.

Hace mucho había visto este código muy bueno:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type texto.txt') do (
set linea=%%x
set linea=!linea:Perl=C!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt
goto:eof


Y lo pensé usar en este código para ripear juegos que funciona de forma excelente.

@echo off
::Sistema MP3 a OGG::
::Variables::
::Extension::
::Entra (diseñado para MP3)
set mp3int=mp3
::Wav (temporal)
set tempwav=wavtmp
::Sale (diseñado para OGG)
set oggext=mp3.ogg
::Calidad::
set configogg=-q 2.50
::Codigo
setlocal enabledelayedexpansion
for /R %%x in (*.%mp3int%) do (
set linea=%%x
set linea=!linea:.mp3=!
call :show !linea!
)
goto:eof
:show
lame --decode "%*.%mp3int%" "%*.%tempwav%"
oggenc2 %configogg% "%*.%tempwav%" -o "%*.%oggext%"
del "%*.%mp3int%" /s
del "%*.%tempwav%" /s
)
goto:eof


Pero hay un inconveniente... :(
Cuando paso
set linea=!linea:.mp3=!
a
set linea=!linea:.%mp3int%=!

La variable %mp3int% ya no responde ¿Como puedo solucionar esto?.

Muchas gracias, agradecido con ustedes por siempre...


"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

Eleкtro

( Sin examinar demasiado el código ), prueba así:

Call set linea=!linea:.%%mp3int%%=!

Saludos








sabeeee

Cita de: Eleкtro en  9 Diciembre 2014, 23:18 PM
( Sin examinar demasiado el código ), prueba así:

Call set linea=!linea:.%%mp3int%%=!

Saludos

Esta vez no funciono amigo.
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

Eleкtro

#3
Estás haciendo un reemplazamiento de variable que resulta innecesario ya que solo pretendes quitar la extensión del archivo, pero Batch pone a tu disposición las variables especiales de FOR y éstas tienen modificadores de variable, los cuales ya hacen esa tarea por ti.

He editado bastante el código, aunque no se si es esto lo que quieres:

Código (dos) [Seleccionar]
set "InExt=mp3"         :: Input file ext.
set "OutExt=ogg"        :: Out   file ext.
set "configogg=-q 2.50" :: ogg encoder parameters.

For /R %%# in (
"*.%InExt%"
) Do (
Call :Convert "%%~f#" "%%~dp#" "%%~n#" "%%~x#" "%OutExt%"
)
Pause & Exit

:Convert
:: %1=Full path
:: %2=Directory name
:: %3=File name
:: %4=File Ext.
:: %5=Output Ext.

Echo.
Echo File: "%~1"
Echo Decode into: "%TEMP%\%~3%~4.tmp"
Echo Encode into: "%~2%~3.%~5"
Echo.

Lame.exe    --decode    "%~1"                  "%TEMP%\%~3%~4.tmp"
oggenc2.exe %configogg% "%TEMP%\%~3%~4.tmp" -o "%~2%~3.%~5"

Del /Q "%TEMP%\%~3%~4.tmp"
Goto :EOF


PD: El codificador de Ogg vorbis no puede convertir directamente el archivo mp3 a ogg?, creo que usar lame para decodificar a wave es un paso innecesario.

Saludos








sabeeee

#4
Cita de: Eleкtro en 10 Diciembre 2014, 13:24 PM
Estás haciendo un reemplazamiento de variable que resulta innecesario ya que solo pretendes quitar la extensión del archivo, pero Batch pone a tu disposición las variables especiales de FOR y éstas tienen modificadores de variable, los cuales ya hacen esa tarea por ti.

He editado bastante el código, aunque no se si es esto lo que quieres:

Código (dos) [Seleccionar]
set "InExt=mp3"         :: Input file ext.
set "OutExt=ogg"        :: Out   file ext.
set "configogg=-q 2.50" :: ogg encoder parameters.

For /R %%# in (
"*.%InExt%"
) Do (
Call :Convert "%%~f#" "%%~dp#" "%%~n#" "%%~x#" "%OutExt%"
)
Pause & Exit

:Convert
:: %1=Full path
:: %2=Directory name
:: %3=File name
:: %4=File Ext.
:: %5=Output Ext.

Echo.
Echo File: "%~1"
Echo Decode into: "%TEMP%\%~3%~4.tmp"
Echo Encode into: "%~2%~3.%~5"
Echo.

Lame.exe    --decode    "%~1"                  "%TEMP%\%~3%~4.tmp"
oggenc2.exe %configogg% "%TEMP%\%~3%~4.tmp" -o "%~2%~3.%~5"

Del /Q "%TEMP%\%~3%~4.tmp"
Goto :EOF


PD: El codificador de Ogg vorbis no puede convertir directamente el archivo mp3 a ogg?, creo que usar lame para decodificar a wave es un paso innecesario.

Saludos

Jajaja, no se que decir es excelente! Hoy aprendí mucho. Y no lamentablemente no hay soporte nativo, ya que ambos son competencia. Lo único que no se te ocurra poner eso el la raíz de tu disco.
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon