AYUDA A MOVER ARCHIVOS Y ENLISTAR A WINAMP CON BATCH VERSION 2

Iniciado por Dsalomon, 4 Febrero 2019, 08:21 AM

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

Dsalomon

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.