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:
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:
La estructura principal llama a dos etiquetas con la sintaxis de subrutina siguiente:
La primera llamada:
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
Salida y código de verificación "exitoso" al terminar
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
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)
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
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.
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.