BATCH: Eliminar caracteres "raros" de un txt: \ / : * ? " < > \ & % (RESUELTO)

Iniciado por inakynet, 7 Julio 2010, 17:31 PM

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

inakynet

He creado (tras mucho sudor, esfuerzo y poco tiempo libre... el que tenga hijos/as lo entenderá) el siguiente BATCH para grabar música de Spotify de forma desatendida. Seguro que es una "chapucilla" y provoco risas a más de uno/a, pero el caso es que ¡funciona!, excepto con canciones que tienen los siguientes caracteres raros:  \ / : * ? " < > \ & %

¿De que forma puedo eliminar esos caracteres? Por ejemplo, un fichero TXT que los contenga, eliminarlos de ese TXT y almacenar el resultado en una variable.

Os pego el código del Batch.



echo off

REM **** Modifica el valor de la ruta donde se grabarán los MP3
REM **** Por ejemplo: set ruta=E:\Grabaciones\

set ruta=E:\Grabaciones\

REM ****

cls
echo                 ***   MP3Tify    ***
echo -----------------------------------------------------
echo  Graba tus canciones de Spotify de forma desatendida
echo -----------------------------------------------------
echo Pon Spotify a sonar y ajusta el nivel de sonido.
echo Recomendamos grabar por "Mezcla Stereo".
echo .
echo Se guardarán las grabaciones en la ruta %ruta%
echo Si quieres grabar los ficheros en una ruta diferente,
echo edita este fichero y cambia el valor de set ruta al
echo principio del fichero.
echo Control + Z para terminar (y cierras tu mismo el HDOGG)
pause

:inicio
cls
echo Esperando inicio de pista ...
C:\Python26\python.exe c:\Python26\pytify.py status >estado1.txt
for /f "tokens=*" %%x in (estado1.txt) do (set estado1=%%x)


:bucle
ping -n 2 127.0.0.1 >nul
C:\Python26\python.exe c:\Python26\pytify.py status >estado2.txt
for /f "tokens=*" %%x in (estado2.txt) do (set estado2=%%x)


if "%estado1%"=="%estado2%" goto :bucle
if not "%pista1%"=="%pista2%" goto :grabar

:grabar
C:\HDOgg\Harddisk.exe -quit
Echo %date:~0,10% %time:~0,8% - OK
C:\Python26\python.exe c:\Python26\pytify.py currentartist >artista.txt
C:\Python26\python.exe c:\Python26\pytify.py currenttrack >titulo.txt
C:\Python26\python.exe c:\Python26\pytify.py status >estado1.txt
for /f "tokens=*" %%x in (artista.txt) do (set artista=%%x)
for /f "tokens=*" %%x in (titulo.txt) do (set titulo=%%x)
for /f "tokens=*" %%x in (estado1.txt) do (set estado1=%%x)

set cancion=%artista% - %titulo%.mp3
set cancion=%cancion:/= %
set cancion=%cancion:\= %
set cancion=%cancion::= %
set cancion=%cancion:?= %
set cancion=%ruta%%cancion:?= %

echo %date:~0,10% %time:~0,8% - Grabando %cancion% ...

start /b C:\HDOgg\Harddisk.exe -record -silent -nofocus -preset C:\HDOgg\none.hdp -filter C:\HDOgg\none.hfs -overwrite -output "%cancion%"
goto :bucle



Gracias por anticipado, un cordial saludo!

Novlucker

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein


Novlucker

#3
Asumo que utilizas este :http://code.google.com/p/pytify/

Abre el pytify.py desde el bloc de notas (guarda una copia antes por si acaso)
Antes del if __name__ == "__main__": agrega lo siguiente:
Código (python) [Seleccionar]
def cleaname(txt_name):
chars = ('/',':','*','?','"','<','>','\\','&','%')
for i in chars:
txt_name = txt_name.replace(i,'_')
return txt_name


Luego al final del script donde dice ...
Código (python) [Seleccionar]
res = cmd(spotify)
if res: print res


... que quede así:
Código (python) [Seleccionar]
res = cmd(spotify)
if res: print cleaname(res)


Con eso debe de ser suficiente :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

inakynet

Muchísimas gracias, con tu solución esto "pirula" perfecto.  ;-) Ni que decir tiene que sois unos "monstruos", ¡cuanto se aprende por estos foros!.

Un cordial saludo!!!


Novlucker

Excelente!, lo que me preocupaba era que el py fuera otro, pero si ha quedado bien! ;D

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein