Script para extraer listado mp3

Iniciado por ovichan, 22 Diciembre 2011, 14:09 PM

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

ovichan

Feliz navidad a todos. Bueno este es mi primer bat ^^, y la verdad es que todo se ejecuta bien excepto que no redirecciona en el caso de errorlevel 2

@echo off
color 0A
title Listar archivos carpetas

:start
set /p ruta=Inserte la ruta de la carpeta:
echo.
cd %ruta%
if errorlevel 1 (echo Inserto una ruta incorrecta, vuelva a introducirla. & cls & goto start)

:accion
set /p nombre_archivo=Inserte el nombre de archivo de texto donde guardar el resultado:
if exist "%ruta%\%nombre_archivo%.txt" (choice /c sn /m "Desea sobreescribir archivo, Si(s) o no(n):  ") else goto escribir
if errorlevel 1 goto escribir
if errorlevel 2 (cls & goto accion)


:escribir
dir /b *.mp3>%nombre_archivo%.txt
pause>nul


Una ayudita please ^^

ovichan

Solucionado, pensaba que aunque fuese la lectura linea por linea detectaria que errorlevel uno no fue la opcion elegida, pero al parecer no es asi, la lee y la ejecuta... tiene leches ^^

El correcto sería asi
@echo off
color 0A
title Listar archivos carpetas

:start
set /p ruta=Inserte la ruta de la carpeta:
echo.
cd %ruta%
if errorlevel 1 (echo Inserto una ruta incorrecta, vuelva a introducirla. & cls & goto start)

:accion
set /p nombre_archivo=Inserte el nombre de archivo de texto donde guardar el resultado:
if exist "%ruta%\%nombre_archivo%.txt" (choice /c sn /m "Desea sobreescribir archivo, Si(s) o no(n):  ") else goto escribir
if errorlevel 2 (cls & goto accion)
if errorlevel 1 goto escribir


:escribir
dir /b *.mp3>%nombre_archivo%.txt
pause>nul


En otros lenguajes la primera sentencia hubiera no se hubiese ejecutado y hubiera saltado a la siguiente. Es una peculiaridad de este lenguaje???

ovichan

Suponiendo que quisiera preguntar al user, el formato de la musica a listar... como podria concantenar los string de manera que al final la linea de ejecucion vaya ampliando formatos. Me explico:

Si tengo la linea que ejecuta el listado, para mp3:

dir /b *.mp3>%nombre_archivo%.txt

Y al preguntar al user, decide tambien listar los flac de la carpeta. Como puedo concatenar de manera que quedase asi:

dir /b *.flac & dir /b *.mp3>%nombre_archivo%.txt

Con algun tipo de bucle quizas??

Eleкtro

#3
CitarComo puedo concatenar de manera que quedase asi:
dir /b *.flac & dir /b *.mp3>%nombre_archivo%.txt

También podría ser así xD:
Código (dos) [Seleccionar]
dir /b "*.flac"; "*.mp3" > "%nombre_archivo%.txt"




¿Lo que buscas es algo así?

Código (dos) [Seleccionar]
@echo off

REM MP3
Call :Listar MP3

REM FLAC
choice /M "Desea listar los flac tambien?"
If %ErrorLevel% Equ 1 (Call :Listar FLAC)

REM M4A
choice /M "Desea listar los M4A tambien?"
If %ErrorLevel% Equ 1 (Call :Listar M4A)

Pause >NUL


:Listar
dir /b "*.%1">>"%nombre_archivo%.txt"
Goto :EOF


Un saludo.


EDITO: En tu script, recuerda usar comillas dobles aquí para evitar futuros errores:



Código (dos) [Seleccionar]
cd "%ruta%"
y
Código (dos) [Seleccionar]
dir /b "*.mp3">"%nombre_archivo%.txt"








ovichan

Muchas gracias EleKtro H@cker, es peliculiar este idioma... intente usar operadores logicos, dir /b *.flac || *.mp3; pero claro no rulaba ^^.

Lo del call es muy interesante pero pensaba que servia para otra cosa, segun lei en otros manuales. Pero es bueno saber que puedes hacer llamadas a las etiqutas. Cito:

CitarEl comando call es realmente util. Sirve para llamar a un programa y que se ejecute dentro de el nuestro, cuando acabe de ejecutarse seguira corriendo nuestro bat principal desde el call.

Es mas o menos lo que buscaba, e imagino que me he explicado mal. Mi idea era mas en el sentido de una pregunta unica de modo: "Introduzca la extension de los formatos a listar: " ; de manera que se introduciria por comas: mp3, flac, mp4. Al dar al enter hiciese:

dir /b "*.%1" ; "*.%2" ; "*.%3"

De esa manera no tendria que sobreescribir el archivo varias veces.  Imagino que seria necesario un bucle de lectura o algo asi; para ir añadiendo a alguna variable los resultados. Voy a ver si me entero de la estructura de los for en este lenguaje ^^.

Lo dicho muchas gracias por tu respuesta

Eleкtro

#5
De nada para eso estamos  :silbar:

olvidate de tanto bucle xD, son útiles y esto se podría hacer con un FOR pero muchas veces se puede simplificar las cosas sin necesidad de bucles...

Ahora que entiendo mejor tu idea, aqui tienes:




@echo off

Set /P Formatos=Introduzca la extension de los formatos a listar:
Set Formatos=%formatos: =%
Set Formatos=%formatos:,=; *.%
Call :Listar %Formatos%
Pause
Exit

:Listar
dir /b *.%*>"%nombre_archivo%.txt"
Goto :EOF



Código (DOS) [Seleccionar]
@echo off
Set /P Formatos=Introduzca la extension de los formatos a listar:
For /F "tokens=1-10 delims=, " %%a in ('Echo %formatos%') do (
Dir /B *.%%a; *.%%b; *.%%c; *.%%d; *.%%e; *.%%f; *.%%g; *.%%h; *.%%i>"%nombre_archivo%.txt")
pause
Exit


Nota: Estos codes funcionan suponiendo que el usuario introduzca los formatos de tal manera

mp3, flac, m4a, wma, wav, etc...
o
mp3,flac,m4a,wma,wav,etc...




PD: Los dos codes actuan igual, lo he comprobado, aunque al final con el FOR lo he simplificado más jaja, pero bueno, no siempre suele ser asi... creo que es mejor opción buscar alternativas y jugar con los parametros como en el primer code. No se si los demás pensarán como yo xDDDD, tu crea tus scripts como mejor sepas pero intentando simplificarlo.

Saludos








ovichan

Muchas gracias voy a analizar tu codigo, que empezando con el cuesta un pelo  ^^