Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Dsalomon

#1
Saludos amigos vengo por su conocimiento para entender o corregir un código que me facilitaría varias acciones repetitivas relacionadas a programar un canal de Tv local; en 2015 nuestro administrador Elektro, me estructuro con una impresionante lógica el código, pero mi inexperiencia me ha llevado aun hoy en 2019, en no comprenderlo a totalidad, y no poder usarlo tratare de explicarlo en búsqueda de correcciones o sus amables sugerencias.

Dejo el link de referencia del tema donde inicie esto.

https://foro.elhacker.net/scripting/mover_a_otra_carpeta_y_usar_una_archivo_por_orden_de_menor_a_mayor_con_batch-t428033.0.html;msg1989649#msg1989649

Y la referencia de Winamp:

http://forums.winamp.com/showpost.php?p=1953663&postcount=7

Explicación:

Tengo una carpeta llamada "capítulos" con una serie con extensión MP4, AVI, o MKV, ordenados en números de menor a mayor: 

Capitulo_001.mp4
Capitulo_002.avi
Capitulo_003.mkv
Capitulo_004.mp4
etc.


Necesito mover el archivo de menor número en su nombre a otra carpeta llamada "emitidos"; Eso funciona de maravilla en el código.

Por ultimo ese archivo (ahora en la carpeta "emitidos") se debe agregar a al editor de listas de reproducción de Winamp y reproducirlo, combinando la Winamp Command Line.

He aquí el código, con algunas mínimas modificaciones del de Elektro:

Código (dos) [Seleccionar]

@Echo OFF & Title codigo estructurado por Elektro
IF NOT EXIST emitidos (md emitidos)
Call :MoverSigArchivo "mp4" "%Cd%\capitulos" "%Cd%\emitidos"
Call :PlayEnWinamp "%SigArchivo%"
Exit /B 0


:MoverSigArchivo
set "extension=%~1"
Set "capitulos=%~2"
Set "emitidos=%~3"


For %%# in (
"%capitulos%\*.%extension%"
) Do (
Set "sigArchivo=%%~f#"
(Move "%%~f#" "%emitidos%\%%~nx#")1>NUL
Exit /B 0
)
Goto:EOF 

:PlayEnWinamp
Set "filepath=%~1"
Set "wampDir=%PROGRAMFILES(X86)%\Winamp"

If "%~2" NEQ "" (Set "wampDir=%~2")

Start /B "WinAmp" "%wampDir%\winamp.exe" "%filepath%"
Goto:EOF




Este Código se ejecuta en la carpeta actual: %CD%  y verifica que exista una carpeta "emitidos", sino la crea dentro de la carpeta actual:


Código (dos) [Seleccionar]
IF NOT EXIST emitidos (md emitidos)



La estructura principal llama a dos etiquetas con la sintaxis de subrutina siguiente:

CitarCALL :[etiqueta][parametro1, parametro2, parametro3] 

La primera llamada:

Código (dos) [Seleccionar]
Call :MoverSigArchivo "mp4" "%Cd%\capitulos" "%Cd%\emitidos"

Según entiendo:

Llamada: etiqueta :MoverSigArchivo y le asigna tres parámetros
      parametro1: mp4 se guarda y se referira como %1
      parametro2: ruta actual\capitulos y se referira como %2
      parametro3: ruta actual\emitidos y se referira como %3


Llamada: etiqueta :PlayEnWinamp y le asigna la variable %SigArchivo% como único parametro


Código (dos) [Seleccionar]
Call :PlayEnWinamp "%SigArchivo%"


Salida y código de verificación "exitoso" al terminar

Código (dos) [Seleccionar]
Exit /B 0


Etiqueta :MoverSigArchivo y le asigna tres argumentos
     argumento1: extension sin comillas:  mp4, se guarda como %~1, se asigna la variable %extension%
     argumento2: nombre de la carpeta sin comillas: capitulos, se guarda como %~2, se asigna la variable %capitulos%
     argumento3: nombre de la carpeta sin comillas: emitidos, se guarda como %~3, se asigna la variable %emitidos%

NOTA:
Con Comillas: %1 resultado: "parámetro de varias letras"
Sin Comillas: %~1 resultado: parámetro de varias letras


Código (dos) [Seleccionar]

:MoverSigArchivo
set "extension=%~1"
Set "capitulos=%~2"
Set "emitidos=%~3"



FOR analiza y asigna la variable con nombre: #

sintaxis FOR para archivos

FOR %%parámetro IN (establecer comandos o rutas) DO (acciones)
      
PARA %%# EN (carpeta: capitulos\todos los archivos.mp4) DO (accion mover) salir y verificar
   
SET declara la variable: "SigArchivo" que devuelve el modificador %%~f#: ruta y el archivo de número menor

MOVE (argumento1, argumento2) DO (MOVER %%~f# a carpeta emitidos\%%~nx#)
      
REFERENCIAS:

%%~f#: ruta del archivo con número menor (no estoy seguro)
%%~nx#: nombre de archivo y extensión
1>NUL: no direcciona salida de texto
EXIT /B 0:  salida con código "exitoso"
GOTO EOF:  terminar funciones y continua a la etiqueta :PlayEnWinamp" y sus comandos)

Código (dos) [Seleccionar]

For %%# in (
"%capitulos%\*.%extension%"
) Do (
Set "sigArchivo=%%~f#"
(Move "%%~f#" "%emitidos%\%%~nx#")1>NUL
Exit /B 0
)
Goto:EOF 



Etiqueta: PlayEnWinamp y le asigna tres argumentos
     argumento1: Asignar una variable llamada Filepath argumento %~1 definido extensión en la etiqueta MoverSigArchivo

argumento2: Asignar una variable llamada wampDir: ruta de instalación de winamp, argumento %~2

      
IF el argumento: carpeta capitulos NEQ: no es igual
n+1 aumenta el numero


Código (dos) [Seleccionar]

:PlayEnWinamp
Set "filepath=%~1"
Set "wampDir=%PROGRAMFILES(X86)%\Winamp"

If "%~2" NEQ "" (Set "wampDir=%~2")

Start /B "WinAmp" "%wampDir%\winamp.exe" "%filepath%"
Goto:EOF



Conclusiones:

El código funciona hasta la parte donde mueve los archivos,
Pero al enlistar el archivo la ruta sigue en la carpeta capítulos y no emitidos...

No se si me pueden ayudar a ver como corregir que enliste el ultimo archivo movido a la carpeta "emitidos".

Buena madrugada.



#2
buena madrugada... pues... gracias por el código... lo tomare como regalito de cumpleaños...
pues la verdad, aun no me ha funcionado... pero me he dedicado a observarlo y por error me di cuenta que:

si por ejemplo la no existe una carpeta "emitidos", el archivo  con el numero menor se reproduce en el playlist de winamp, sin ningún problema... y claro la consola avisa que no encontró el archivo, por lo tanto nada se mueve y el codigo no cumple el 50% de la necesidad.

pero siendo el caso que si existe la carpeta "emitidos", si mueve correctamente de carpeta el archivo con numero menor  y se enlista al playlist de winamp pero no muestra su tiempo, por lo cual no reproduce... igual estoy a medio camino  :-(

yo se que mi objetivo es aprender y no solo ser una maquina de copiar y pegar... pero aqui dejo el codigo que casi no toque...

Código (dos) [Seleccionar]
@Echo OFF & Title By Elektro


Call :MoveNextFile "avi" "G:\Candy capitulos" "G:\Candy capitulos\emitidos"
Call :PlayInWinamp "%nextFile%"
Pause&Exit /B 0


:MoveNextFile :: %1=fileExt %2=inputDir %3=outputDir var=nextFile
set "fileExt=%~1"
Set "inputDir=%~2"
Set "outputDir=%~3"
For %%# in (
"%inputDir%\*.%fileExt%"
) Do (
Set "nextFile=%%~f#"
(Move "%%~f#" "%outputDir%\%%~nx#")1>NUL
Exit /B 0
)
Goto:EOF


:PlayInWinamp :: %1=filepath %2=wampDir(Optional)
Set "filepath=%~1"
Set "wampDir=%PROGRAMFILES(X86)%\Winamp"
If "%~2" NEQ "" (Set "wampDir=%~2")
Start /B "WinAmp" "%wampDir%\winamp.exe" "%filepath%"
Goto:EOF



y también algunas imágenes que ilustran mi intención
con el tema de los metadatos... creo que no era el caso..
por favor abrir las imágenes en una pestaña nueva... pues no encontré como mostrarlas compleas en este foro





gracias..
#3
Buenas noches, esta es la primera vez que escribo en esta sección del foro, bueno y al grano mi consulta es esta:

compre en una ganga 2 equipos de puente inalambrico modelo FWB5000 - JMP SYSTEMS (Coreanos), con la idea de conectar a través de antenas 2 puntos, para hacer un Stream de vídeo en la red que estos me permiten, para poder transmitir un evento de vídeo y conectarlo a la red análoga conocida como cable de tv.

la cuestión es que utilizando el PUTTY, y un cable serial logre ingresar al administrador del mismo



después de batallar un rato, logre que los 2 equipos (router),  se pudieran ver a través del canal RF 12 y pense que habia ganado la batalla,

hice un ping sostenido para verificar y podía comunicarme en teoría con la otra terminal, lbien instale el programa VLC a las Pc's que a su vez se conectaban al router y antenas a tráves de cable utp, le coloque ips del mismo rango a ambas pc pero no puedo ver las pc a pesar qu tienen las ips del mismo rango, pero si puedo hacer ping a la otra terminal router, por lo cual mi idea de video en red no me funciona, alguna sugerencia de un paso olvidado.
#4
que tal Elecktro, mira el código esta muy ordenado y fácil de entender,

prácticamente solo cambie la ruta del programa por la variable de programas %PROGRAMFILES(X86)%\Winamp y procedio muy bien


buen el caso que cuando el capitulo seleccionado se añade a la lista de reproducción no muestra el tiempo del vídeo, puedo solo especular que:

o no reconoce la extensión, aunque en las propiedades si lo reconoce como un avi

entonces pensé añadirle la extensión .avi manualmente pero no funciona igual...
#5
gracias a las 2 respuestas, he corregido una parte, pues la verdad me gusta este lenguaje por su facilidad de compliacion.

la idea es que moviera solo un archivo : el mas del numero meno en su nombre y despues lo reprodujera en winamp

pero hasta el momento mueve los 2 y reproduce los 2 

con esta parte del código:

Código (dos) [Seleccionar]
for /f "tokens=*" %%a in ('dir /b /on E:\series\candy\*.avi') do (
move E:\series\candy\"%%a" E:\series\emitidos
E:\series\emitidos\"%%a"
)


hasra alli todo bien...


y gracias igualmente feliz año elektro... y por cierto gracias por los tips anteriores ya que sin ellos no entendería nada de nada aunque sea...
#6
Buena noche amigos, estoy aquí nuevamente para hacer otra de esas solicitudes de ayuda en un batch, sino extrañas, pero no comunes, esta es la situación,

Tengo una colección de archivos de video dentro de una carpeta llamada SERIE1
Los archivos dentro de SERIE1 están nombrados con tres ceros 000 para para mantener un orden de los mismos y no se enreden los que tengan 1 con los 11, o sea mantengan la numeración que corresponde a un correlativo algo asi:

SERIE1:
Capitulo_001
Capitulo_002
Capitulo_003
Capitulo_004
Capitulo_005
Capitulo_006
Capitulo_007
Capitulo_008
Capitulo_009
Capitulo_010
Capitulo_011
Capitulo_012
Etcétera....

Al dar doble click al batch: quiero que el archivo: Capitulo_001 se mueva a una carpeta nueva llamada SERIE1_EMITIDOS, y después se añada a la lista de reproducción de winamp para parle Reproducir o play.
Y así entonces el siguiente archivo la próxima vez al darle al batch seria Capitulo_002 y play en winamp,
Y consecutivamente, cada vez que se corra el comando en el batch, hasta que la carpeta SERIE1 quede vaciá y la carpeta SERIE1_EMITIDOS guarde intactos todos los capítulos, para tal efecto googlenado halle esto más lo mezcle con otros códigos para ver si así funciona o me pueden guiar a corregirlo

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

Echo #EXTM3U>"%Temp%\capitulo_hoy.tmp"

for /f "tokens=*" %%a in
('dir /b /on E:\series\SERIES1\*.mkv$*') do
(
move E:\series\SERIES1\"%%a" E:\series\SERIES1

E:\series\SERIES1\"%%a"
pause
)

do (Echo  %%a>>"%Temp%\ capitulo_hoy.tmp")


Start /B "" "%PROGRAMFILES(X86)%\Winamp\winamp.exe" "%Temp%\Lista Winamp.m3u"

Exit



muchas gracias por su tiempo, mientras tanto haré mis pruebas.
#7
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...


Código (bash) [Seleccionar]
@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...
#8
 ;-) gracias maestro... no le hice mucho mas que definir los formatos... pero revisare en una virtual para postear mas adelante... desde ya muchas gracias..
#9
Cita de: EleKtro H@cker en  6 Octubre 2013, 20:11 PM
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!


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


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