elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH  (Leído 5,264 veces)
Dsalomon

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« en: 14 Enero 2015, 07:42 am »

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
  1. rem @echo off
  2.  
  3. Echo #EXTM3U>"%Temp%\capitulo_hoy.tmp"
  4.  
  5. for /f "tokens=*" %%a in
  6. ('dir /b /on E:\series\SERIES1\*.mkv$*') do
  7. (
  8. move E:\series\SERIES1\"%%a" E:\series\SERIES1
  9.  
  10. E:\series\SERIES1\"%%a"
  11. )
  12.  
  13. do (Echo  %%a>>"%Temp%\ capitulo_hoy.tmp")
  14.  
  15.  
  16. Start /B "" "%PROGRAMFILES(X86)%\Winamp\winamp.exe" "%Temp%\Lista Winamp.m3u"
  17.  


muchas gracias por su tiempo, mientras tanto haré mis pruebas.


En línea

Black Dragon

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« Respuesta #1 en: 14 Enero 2015, 11:37 am »

Pues ni idea de si funciona el código siguiente al que he llegado. Estoy bajo Linux y no tengo ninguna forma de probarlo en windows. Probablemente tenga errores de comillado u otras cosas pero la estructura debería ser algo como lo que pongo al final.

La idea es mantener un registro en un archivo separado que guarda el número de capitulo por el vamos. He dado por sentando que no hay capítulos que se saltan números, si existiesen deberías agregar algún tipo de comprobación.

Asi que si tiene errores deberás encontrarlos y arreglarlos tu mismo.

Un saludo.

Código
  1. @echo off
  2.  
  3. cd /D E:\series\SERIES1
  4.  
  5. IF NOT EXIST Actual.txt (
  6. echo "Iniciando... Creando archivo de Posicion."
  7. echo "0" >Actual.txt
  8. ) ELSE (
  9. rem Creamos el archivo Actual.txt en el que contiene el capitulo actual
  10. SET /P actual_n= < Actual.txt
  11. )
  12. rem Recoge el valor numerico le pone 5 ceros y recoge los ultimos 3 dijitos
  13. rem Asi siempre tenemos el mismo numero de digitos con ceros al inicio.
  14. set actual=00000%actual_n%
  15. set actual=%actual:~-3%
  16.  
  17. rem Si no existe la carpeta de emitidas la creamos
  18. IF NOT EXIST SERIES1_EMITIDAS (
  19. echo "Creando carpeta de emitidas"
  20. md SERIES1_EMITIDAS
  21. )
  22. rem Movemos el capitulo actual a la carpeta de emitidos
  23. move Capitulo_%actual% SERIES1_EEMITIDAS\
  24. cd SERIES1_EEMITIDAS
  25.  
  26. rem Ejecutamos winamp o agregamos a la lista de reproduccion actual el capitulo
  27. rem actual que queremos ver.
  28. %PROGRAMFILES(X86)%\Winamp\winamp.exe /ADD Capitulo_%actual%
  29.  
  30. rem Salimos de la carpeta emitidas, incrementamos el valor de nuestro capitulo
  31. rem y lo sobreescribimos en el archivo que contiene el numero de capitulo siguiente
  32. cd ..
  33. SET /A "sigueinte=actual_n+1"
  34. echo %siguiente% >Actual.txt
  35.  


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« Respuesta #2 en: 15 Enero 2015, 02:47 am »

Hola

Me alegra verte de nuevo por el foro :)



Respuesta Corta:

Tú script está bien, hay ciertas cosas que se pueden mejorar (como la sintaxis, espacios en blanco, y reemplazar el pause dentro del For por la instrucción apropiada... para salir del búcle), pero se puede decir que está bien.

El script de @Black Dragon se podría decir que también está bien, aunque ha cometido algunos fallos de escritura por ejemplo al nombrar una variable de una manera y usarla con otro nombre distinto, y el script no funcionará con archivos que contengan espacios en el nombre ya que encerró NO encerró los strings con comillas dobles, pero por lo que he visto en tu script estás capacitado para corregir tú mismo esos pequeños fallos de sintaxis que él tuvo.



Respuesta Larga:

1) Batch es el lenguaje menos apropiado y el más limitado para este tipo de tareas, deberías intentar usar cualquier otro lenguaje que te permita al menos implementar controles de errores básicos y eficientes cuando de trata de la interacción con archivos ""delicados"".

2) Si todos los archivos contenidos en ese directorio tienen esa enumeración incrementativa (001 > 002 > ... > 100) entonces no es necesario guardar un registro de los archivos que vayas moviendo, simplemente puedes listar los archivos y mover el primero que se encuentre cómo estás haciendo en tu Script, el primero que se encuentre siempre será el sigueinte de la lista (001 > 002 > 003, etc) ya que Batch por defeecto utiliza un ordenamiento por String.
Si los archivos estuviesen enumerados tal que así: 1 > 2 ... > 10, entonces la cosa ya cambia y ahí si que practicamente te obligaría a no utilizar Batch para esa tarea, ya que entonces habría que implementar un ordenamiento de tipo "Bubble Sort" y eso es algo muy tedioso en un lenguaje limitado como es Batch ...cualquier cosa es tediosa.

En todo caso, si guardas un registro como en el ejemplo del compañero @Black Dragon, te sugiero hacerlo en el registro de Windows, no en un archivo de texto, simplemente por seguridad, dada la situación.

3) No existe modo alguno mediante Batch para interactuar/manejar Winamp de forma eficiente (ni siquiera recurriendo a los parámetros comandline de Winamp),
en otros lenguajes puedes literalmente leer el proceso (utilizando técnicas de IPC) para añadir archivos a la lista actual de forma eficiente, aunque esto conlleva una elaboración mucho más elevada del código y una mayor adquisición de conocimientos y entendimiento de lo que estás haciendo, pues alguien que está aprendiendo a programar en Batch no es capaz de elaborar el código necesario, pero por suerte siempre existen APIs que te harían todo el trabajo por ti.

La idea de crear una lista multimedia de tipo m3u me parece buena y simple, es lo que yo hago cuando quiero reproducir una lista aleatoria de mi PC ya que no tiene mayores dificultades que la de escribir los nombres de archivo en un archivo de texto plano, pero eso tiene el inconveniente de que al cargarla en Winamp se reemplazará por la lista actual, y no se si eso es lo que quieres.

Winamp dispone algunos parámetros que puedes usar desde la consola (ej: /ADD ), pero no funcionarán en todos los escenarios... bueno, lo cierto es que a cada usuario le puede funcionar de una manera distinta, por ejemplo si no has registrado winamp en el menú contextual desde las opciones de la aplicación, no funcionará dicho comando por estúpida que parezca la relación entre ambos, ya que Winamp es una aplicación que está bastante bugueada en el sentido de las asociaciones y la integración del menú contextual, y sus handlers para reproducir y añadir archivos a una lista, es algo que hace ya tiempo discutí con los desarrrolladores pero por lo visto no les apetece corregir/mejorar dichas características, o no saben cómo hacerlo.

Hay ciertas aplicaciones commandline que te ayudan a manejar winamp desde la consola, como por ejemplo CLAMP y CLEVER, desconozco sus funcionalidades (no se de que son capaces), pero como último recurso (si no te funciona el parámetro /ADD ni quieres aprender otro lenguaje) siempre puedes recurrir a la utilización de dichas herramientas commandline desde Batch.



Saludos!
« Última modificación: 16 Enero 2015, 09:50 am por Eleкtro » En línea

Dsalomon

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« Respuesta #3 en: 16 Enero 2015, 08:16 am »

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
  1. for /f "tokens=*" %%a in ('dir /b /on E:\series\candy\*.avi') do (
  2. move E:\series\candy\"%%a" E:\series\emitidos
  3. E:\series\emitidos\"%%a"
  4. )

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...
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« Respuesta #4 en: 16 Enero 2015, 08:22 am »

Este lenguaje no se compila se interpreta, eso lo hace un scripting justamente... Sin embargo de los lenguajes de scripting es uno de los menos potentes, ya que su fin es la automatización de procesos lineales para lotes de archivos
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« Respuesta #5 en: 16 Enero 2015, 10:10 am »

pero hasta el momento mueve los 2 y reproduce los 2  

No entiendo muy bien que quieres decir con que mueve los "dos".

Prueba a estructurar tú código de la siguiente manera:

Código
  1. @Echo OFF & Title By Elektro
  2.  
  3.  
  4. Call :MoveNextFile "avi" "E:\series\candy" "E:\series\emitidos"
  5. Call :PlayInWinamp "%nextFile%"
  6. Pause&Exit /B 0
  7.  
  8.  
  9. :MoveNextFile :: %1=fileExt %2=inputDir %3=outputDir var=nextFile
  10. set "fileExt=%~1"
  11. Set "inputDir=%~2"
  12. Set "outputDir=%~3"
  13. For %%# in (
  14. "%inputDir%\*.%fileExt%"
  15. ) Do (
  16. Set "nextFile=%%~f#"
  17. (Move "%%~f#" "%outputDir%\%%~nx#")1>NUL
  18. Exit /B 0
  19. )
  20. Goto:EOF
  21.  
  22.  
  23. :PlayInWinamp :: %1=filepath %2=wampDir(Optional)
  24. Set "filepath=%~1"
  25. Set "wampDir=C:\Program Files\WinAmp"
  26. If "%~2" NEQ "" (Set "wampDir=%~2")
  27. Start /B "WinAmp" "%wampDir%\winamp.exe" "%filepath%"
  28. Goto:EOF

Saludos
« Última modificación: 16 Enero 2015, 10:14 am por Eleкtro » En línea

Dsalomon

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« Respuesta #6 en: 17 Enero 2015, 08:06 am »

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...
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« Respuesta #7 en: 17 Enero 2015, 08:40 am »

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:

Esa información la extrae WinAmp de los archivos, puedes configurar en las opciones de WinAmp para que siempre obtenga los metadatos aunque los archivos aun no hayan sido procesados por el reproductor:



Por otro lado, como bien has deducido winamp no puede reconocer la duración de ciertos archivos de video, creo que la única solución es que mejoren/actualicen el programa en general... creo que para ese problema de la duración del video solo puedes intentar buscar una solución en el foro de winamp.

PD: Aunque en la opción de la imagen especifica que es para leer los títulos, lo cierto es que también es para leer la duración de los archivos.

Saludos
« Última modificación: 17 Enero 2015, 08:47 am por Eleкtro » En línea

Dsalomon

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
« Respuesta #8 en: 9 Febrero 2015, 09:51 am »

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
  1. @Echo OFF & Title By Elektro
  2.  
  3.  
  4. Call :MoveNextFile "avi" "G:\Candy capitulos" "G:\Candy capitulos\emitidos"
  5. Call :PlayInWinamp "%nextFile%"
  6. Pause&Exit /B 0
  7.  
  8.  
  9. :MoveNextFile :: %1=fileExt %2=inputDir %3=outputDir var=nextFile
  10. set "fileExt=%~1"
  11. Set "inputDir=%~2"
  12. Set "outputDir=%~3"
  13. For %%# in (
  14. "%inputDir%\*.%fileExt%"
  15. ) Do (
  16. Set "nextFile=%%~f#"
  17. (Move "%%~f#" "%outputDir%\%%~nx#")1>NUL
  18. Exit /B 0
  19. )
  20. Goto:EOF
  21.  
  22.  
  23. :PlayInWinamp :: %1=filepath %2=wampDir(Optional)
  24. Set "filepath=%~1"
  25. Set "wampDir=%PROGRAMFILES(X86)%\Winamp"
  26. If "%~2" NEQ "" (Set "wampDir=%~2")
  27. Start /B "WinAmp" "%wampDir%\winamp.exe" "%filepath%"
  28. 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..
« Última modificación: 9 Febrero 2015, 09:55 am por Dsalomon » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
mover archivo mas antiguo de una carpeta a otra
Scripting
super_perro 0 2,214 Último mensaje 29 Octubre 2007, 18:45 pm
por super_perro
[Batch] Script para mover ficheros segun su fecha de creacion a otra carpeta
Scripting
javor 1 13,131 Último mensaje 19 Febrero 2009, 16:47 pm
por Novlucker
error en el orden de 4 números al azar de mayor a menor
Programación Visual Basic
creiko 0 2,303 Último mensaje 18 Septiembre 2016, 05:40 am
por creiko
Orden de las imágenes al imprimir no sigue orden carpeta
Windows
Esgrimidor 8 5,023 Último mensaje 3 Julio 2017, 13:48 pm
por Randomize
Mover de archivo a una carpeta en bat
Scripting
#Aitor 0 1,640 Último mensaje 20 Noviembre 2017, 10:17 am
por #Aitor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines