(Solucionado) [Batch] Randomizar lineas en un txt?

Iniciado por Eleкtro, 1 Marzo 2012, 18:57 PM

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

Eleкtro

¿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

Código (dos) [Seleccionar]
@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









Eleкtro

#1
Ya se me ocurrió la forma, sorry


Código (dos) [Seleccionar]
@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








Dsalomon

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


Código (dos) [Seleccionar]
@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

Eleкtro

#3
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...  ;-)

Código (dos) [Seleccionar]
@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!








Dsalomon

gracias EleKtro.... como siempre las mejores respuestas

Dsalomon

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..

Eleкtro

#6
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:
Código (dos) [Seleccionar]
Start /B "" "%PROGRAMFILES(X86)%\Winamp\winamp.exe" /ADD "%Playlist%" || (Exit /B 1)

(Información adicional) Para MPC-HC:
Código (dos) [Seleccionar]
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!








Dsalomon

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:
Código (dos) [Seleccionar]
IF %ERRORLEVEL% LEQ 0 cd %UserProfile%\Desktop\clever pause | clever.exe pause >nul & goto :Comprobar

a esto pero no me funciono:
Código (dos) [Seleccionar]
IF %ERRORLEVEL% LEQ 0 FOR /R %%_ in (*clever.exe) do ("%%_") | clever.exe pause >nul | Taskkill /f /IM TxtTick.exe >nul & goto :Esperar

Eleкtro

#8
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








Dsalomon

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:

Código (dos) [Seleccionar]
IF %ERRORLEVEL% LEQ 0 (FOR /R %%_ in (*clever.exe) do ("%%_")) | clever.exe pause >nul | Taskkill /f /IM TxtTick.exe >nul & goto :Esperar