¿Como randomizar el contenido de un txt? :huh:
Es lo único que me falta para acabar este script :P
PD: Acepto cualquier utilidad externa
PD2: Si existiera algún parámetro para iniciar Winamp con la opcion "Activar modo aleatorio de lista" activada, también me serviría...
un saludo
@Echo OFF
Set Carpeta=%~n0
Echo #EXTM3U>"%Temp%\Lista Winamp.m3u"
For /F "Tokens=*" %%$ in ('Dir /B /S "%CARPETA%" ^| Findstr /R ".aif .flac .m4a .mid .mp3 .ogg .wav .wma"') do (Echo %%$>>"%Temp%\Lista Winamp.m3u")
REM Aqui iría el randomizado
Start /B C:"\Program Files (x86)\Winamp\winamp.exe" "%Temp%\Lista Winamp.m3u"
Exit
Ya se me ocurrió la forma, sorry
@Echo OFF
Setlocal enabledelayedexpansion
Set Carpeta=%~n0
Echo #EXTM3U>"%Temp%\Lista Winamp.tmp"
For /F "Tokens=*" %%$ in ('Dir /B /S "%CARPETA%" ^| Findstr /R ".aif .flac .m4a .mid .mp3 .ogg .wav .wma"') do (Echo !Random!!Random!!Random!;%%$>>"%Temp%\Lista Winamp.tmp")
Echo #EXTM3U>"%Temp%\Lista Winamp.m3u"
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\Lista Winamp.tmp" ^| Sort ') do (Echo %%a>>"%Temp%\Lista Winamp.m3u")
Start /B C:"\Program Files (x86)\Winamp\winamp.exe" "%Temp%\Lista Winamp.m3u"
Exit
Reviviendo esto... una duda... yo lo uso así pero como decirle que solo haga una lista de reproducción de, por ejemplo unos 10 archivos, o 5 archivos... ;-)
gracias
@Echo OFF
Title %~n0
Mode con cols=50 lines=3
Setlocal enabledelayedexpansion
chcp 1252 >NUL
Echo+
For /F "Tokens=*" %%$ in ('Dir /B /S "%~dp0" ^| Findstr /R ".avi .mkv"') do (Echo !Random!!Random!!Random!;%%$>>"%Temp%\Lista Winamp.tmp")
Echo #EXTm3u8>"%Temp%\Lista Winamp.m3u8"
For /F "Tokens=2* Delims=;" %%$ in ('Type "%Temp%\Lista Winamp.tmp" ^| Sort ') do (Echo %%$>>"%Temp%\Lista Winamp.m3u8")
Start /B "%PROGRAMFILES(X86)%\Winamp\winamp.exe" "%Temp%\Lista Winamp.m3u8"
Exit
Cita de: Dsalomon en 6 Octubre 2013, 19:40 PMcomo decirle que solo haga una lista de reproducción de, por ejemplo unos 10 archivos, o 5 archivos... ;-)
@Echo OFF & chcp 1252 >NUL & Setlocal enabledelayedexpansion
REM Title %~n0 & Mode con cols=50 lines=3
Set /A "MAX=5"
Set "TMP_Playlist=%Temp%\Playlist.tmp"
Set "Playlist=%Temp%\Playlist.m3u8"
:List
(
For /F "Tokens=*" %%$ in (
'Dir /B /S "%~dp0" ^| Findstr /I /R "\.avi$ \.mkv$"'
) DO (
Echo !Random!!Random!!Random!;%%$
)
)>"%TMP_Playlist%"
:Randomize
(
Echo #EXTm3u8
For /F "Tokens=2* Delims=;" %%$ in (
'Type "%TMP_Playlist%" ^| Sort '
) DO (
Set /A "Count+=1"
If !COUNT! LSS %MAX% (
Echo %%$
) ELSE (
Goto :Run
)
)
)>"%Playlist%"
:Run
Start /B "" "%PROGRAMFILES(X86)%\Winamp\winamp.exe" "%Playlist%" || (Exit /B 1)
Exit /B 0
Saludos!
gracias EleKtro.... como siempre las mejores respuestas
abusando de la confianza podría ser modificado el código para que en lugar de reproducir se añadan a la cola de archivos para reproducir..
Hola
El switch "/ADD" de la aplicación WinAmp sirve precísamente para cargar un archivo sin iniciar su reproducción automática.
Para WinAmp:
Start /B "" "%PROGRAMFILES(X86)%\Winamp\winamp.exe" /ADD "%Playlist%" || (Exit /B 1)
(Información adicional) Para MPC-HC:
Start /B "" "Ruta de MediaPlayerClassic HomeCinema.exe" /Open "%Playlist%" || (Exit /B 1)
PD: De otra forma esto no sería posible hacerlo usando un lenguaje tan simple como Batch, leete la documentación CommandLine del programa.
Haz el favor de comunicar por aquí si el problema está solucionado para cerrar este hilo y que no se vuelva a revivir.
Saludos!
maestro tengo una duda...
cuando coloco el archivo de aplicación
clever.exe
en otra carpeta siempre del escritorio el código se cierra y no me funciona...
pensé remediarlo de esto:
IF %ERRORLEVEL% LEQ 0 cd %UserProfile%\Desktop\clever pause | clever.exe pause >nul & goto :Comprobar
a esto pero no me funciono:
IF %ERRORLEVEL% LEQ 0 FOR /R %%_ in (*clever.exe) do ("%%_") | clever.exe pause >nul | Taskkill /f /IM TxtTick.exe >nul & goto :Esperar
Mientras sigas escribiendo código de la manera en la que lo estás haciendo, los errores no van a cesar.
1. Usa los operadores de agrupación para agrupar los comandos ().
2. Encierra todos los argumentos "" (sobretodo el de la ruta de directorio...).
3. Comprueba si el error se solucionó.
Saludos
maestro perdón por 2 cosa
la primera por colocar la pregunta en el tema equivocado y la segunda por la preguntadera... si no entendí mal solo debo agregar () a la ruta:
IF %ERRORLEVEL% LEQ 0 (FOR /R %%_ in (*clever.exe) do ("%%_")) | clever.exe pause >nul | Taskkill /f /IM TxtTick.exe >nul & goto :Esperar
No puedo ayudarte mucho más porque no entiendo porque intentas usar las Pipes del For con el programa Clever, no tengo estas utilidades de Winamp y tampoco comentas lo que se supone que debería suceder al redireccionar a este programa, entonces solo puedo aconsejarte que mejores la sintaxis/integridad del código y poco más.
Prueba algo así:
IF %ERRORLEVEL% EQU 0 (cd "%UserProfile%\Desktop\clever pause") | (clever.exe pause 1>nul & Goto :Comprobar)
IF %ERRORLEVEL% EQU 0 (FOR /R %%_ in ("*clever.exe") do (start /B "" "%%_")) | clever.exe pause 1>nul | (Taskkill /F /IM TxtTick.exe >nul & Goto :Esperar)
Saludos
maestro como esto ya es diferente a lo tratado mejor abri un tema para esto..
http://foro.elhacker.net/scripting/uso_de_clever_en_winamp-t400500.0.html;msg1890828#msg1890828 (http://foro.elhacker.net/scripting/uso_de_clever_en_winamp-t400500.0.html;msg1890828#msg1890828)
si me pudieras ayudar... ya que solo soy una aprendiz...
por cierto muy interesante el tema que tienes bloqueado por hacer el tutorial de script...
te tengo 2 peticiones para el tema especifico de las lineas en ramdom
1- que los archivos ya no se repitan
2- sera que se le puede poner duracción especifica de tiempo
lei algo al respecto pero no se que tan cierto sea
#EXTM3U
#EXTINF:516,c.04-10-12_07-46.01.avi
#EXTVLCOPT:start-time=14
#EXTVLCOPT:stop-time=30
C:\jb\postdv\2004BrissagoCalvia\c.04-10-12_07-46.01.avi
CitarLos tiempos están dados al segundo más cercano solamente, así que esto no iba para el trabajo de edición no lineal,
Creo que no existe esa información en la estructura M3U, no estoy seguro, pero no creo que cueste tanto abrir la wikipedia, buscar, e informarse: http://en.wikipedia.org/wiki/M3U
CitarDirective Description Example
#EXTM3U File header. Must be the first line of the file! #EXTM3U
#EXTINF Track information, including runtime and title. #EXTINF:191,Artist Name - Track Title
Para especificar el tiempo de duración tienes que crear otro tipo de lista multimedia, por ejemplo "pls", y eso requiere escribir el código desde cero para adaptarlo a la estructura de la nueva lista multimedia.
Pero además, usando Batch no es posible obtener la información de duración de un archivo multimedia, ya te lo dije que pides cosas que con Batch no es posible y va siendo hora de que uses otro lenguaje.
De todas formas puedes usar la aplicación MediaInfo desde la consola para obtener la duración de un archivo multimedia: http://mediaarea.net/es/MediaInfo/Download/Windows
Saludos
Cita de: EleKtro H@cker en 6 Octubre 2013, 20:11 PM
@Echo OFF & chcp 1252 >NUL & Setlocal enabledelayedexpansion
REM Title %~n0 & Mode con cols=50 lines=3
Set /A "MAX=5"
Set "TMP_Playlist=%Temp%\Playlist.tmp"
Set "Playlist=%Temp%\Playlist.m3u8"
:List
(
For /F "Tokens=*" %%$ in (
'Dir /B /S "%~dp0" ^| Findstr /I /R "\.avi$ \.mkv$"'
) DO (
Echo !Random!!Random!!Random!;%%$
)
)>"%TMP_Playlist%"
:Randomize
(
Echo #EXTm3u8
For /F "Tokens=2* Delims=;" %%$ in (
'Type "%TMP_Playlist%" ^| Sort '
) DO (
Set /A "Count+=1"
If !COUNT! LSS %MAX% (
Echo %%$
) ELSE (
Goto :Run
)
)
)>"%Playlist%"
:Run
Start /B "" "%PROGRAMFILES(X86)%\Winamp\winamp.exe" "%Playlist%" || (Exit /B 1)
Exit /B 0
Saludos!
Maestro después de un par de días viendo el resultado del código que tuviste a bien a facilitar y aun mejorar, le estoy hallando un inconveniente... pero tu dimelo si no me equivoco...
efectivamente el código toma en este caso de una carpeta de manera aleatoria 5 archivos... pero observando... me fije que siempre toma los 5 primeros de la carpeta y a esos 5 les aplica el RANDOM... habrá alguna manera que de toda la carpeta (en mi caso la carpeta tiene mas de 50 archivos) tome 5 aleatorios no dependiendo de su nombre, para que al final juege los 50 y tome 5 de manera aleatoria...?
ahora si me confundo ... perdona las molestias muchas...
Hola
Estás equivocado, todos los archivos (todos, no los 5 primeros) se escriben de forma ordenada en el archivo Playlist.tmp, pero añadiéndole un número aleatorio a la izquierda, de esta manera:
70341602815107;C:\archivo1
48242686216352;C:\archivo2
65562921929452;C:\archivo3
240062826615990;C:\archivo4
11032263219974;C:\archivo5
etc...
Luego la lista se ordena de menor a mayor según los números aleatorios, consiguiende así un shuffle, los nombres de la derecha quedan desordenados:
11032263219974;C:\archivo5
240062826615990;C:\archivo4
48242686216352;C:\archivo2
65562921929452;C:\archivo3
70341602815107;C:\archivo1
etc...
Y por último se eliminan los números, y se toman los primeros 5 archivos de la lista:
C:\archivo5
C:\archivo4
C:\archivo2
C:\archivo3
C:\archivo1
Nunca tendrán el mismo orden, ni serán siempre los mismos archivos.
PD: He vuelto a probar el código por si acaso, pero no, no llevas razón, nunca obtengo los mismos archivos.
Si le has hecho alguna modificación al código original deberías postearla para buscar y corregir el error.
Saludos!
;-) gracias maestro... no le hice mucho mas que definir los formatos... pero revisare en una virtual para postear mas adelante... desde ya muchas gracias..
Buena noche... reaperturo el tema con una pregunta e inquietud si se me permite
Este código proporcionado es una de las aportaciones más fantásticas que me he encontrado en mi vida de internauta... por lo cual dia a día es una de mis herramientas de trabajo... durante los años de uso he notado 3 problemas o bugs o la verdad no sé cómo llamarles y para ir al grano proporcionare primero las variantes que le he añadido...
@Echo OFF & chcp 1252 >NUL & Setlocal enabledelayedexpansion
REM Title %~n0 & Mode con cols=50 lines=3
Set /A "MAX=10"
Set "TMP_Playlist=%Temp%\Playlist.tmp"
Set "Playlist=%Temp%\Playlist.m3u8"
:List
(
For /F "Tokens=*" %%$ in (
'Dir /B /S "%~dp0" ^| Findstr /I /R "\.avi$ \.mkv$"'
) DO (
Echo !Random!!Random!!Random!;%%$
)
)>"%TMP_Playlist%"
:Randomize
(
For /F "Tokens=2* Delims=;" %%$ in (
'Type "%TMP_Playlist%" ^| Sort '
) DO (
Set /A "Count+=1"
If !COUNT! LSS %MAX% (
Echo %%$
) ELSE (
Goto :Run
)
)
)>"%Playlist%"
:Run
if %PROCESSOR_ARCHITECTURE%==x86 (
Start /B "" "%PROGRAMFILES%\Winamp\winamp.exe" "%Playlist%" || (Exit /B 1)
) else (
Start /B "" "%PROGRAMFILES(X86)%\Winamp\winamp.exe" "%Playlist%" || (Exit /B 1)
)
Exit /B 0
El resultado es que me crea y reproduce un playlist en el amigo Winamp...
con la cantidad de 10 archivos en un playlist en Winamp, los cuales fueron definidos en la variable "MAX=10"
1. el primer problema o bug es que al encontrar un archivo con caracteres especiales digamos tildes, eñe, etc. Los añade pero no los reproduce haciendo que winamp se culgue al no saber interpretar el archivo
Ejemplo: "Líneas de la vida.avi" la muestra como "L�neas de la vida" dentro del playlist del reproductor y cuelga Winamp por que no lo puede reproducir
2. al ejecutarse en el código en forma de Batch crea la lista correctamente, generando un playlist de 10 archivos de video.
Después aunque añada manualmente al playlist, por alguna razón la reproducción se detiene en el archivo final... aunque después haya añadido un archivo o archivos, no entiendo por qué pero lo hace.
3. Y como el archivo batch lo uso por lo general en carpetas con determinada colección de archivos y ya lo había mencionado
El RANDOM siempre elige el mismo juego de archivos
Suponiendo que tengo 10 archivos de video en una carpeta y el código crea un playlist con 5 archivos RAMDOM siempre elige los mismos 5 solo que los aplica aleatoriamente aunque tenga 10 la carpeta siempre elige los mismos 5 y les aplica RAMDOM o sea no se ejecuta en los archivos restantes...
La verdad me gustaría mucho entender la lógica del lenguaje para poder hacer mis propias deducciones, pero mejor solicito ayuda para poder corregirlo.
De antemano Gracias...