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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  ¿Se puede hacer este script?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Se puede hacer este script?  (Leído 5,141 veces)
davoker

Desconectado Desconectado

Mensajes: 36


Ò0ó


Ver Perfil WWW
¿Se puede hacer este script?
« en: 21 Junio 2016, 03:39 am »

Cogemos 2 archivos, los comparamos buscando coincidencias en el nombre, y uno se renombra igual que el otro, me explico mejor.

Un archivo .png y otro .zip con estos nombres:

png -> andeandara.png
zip -> andeandaraXD.zip

El script compara el nombre del .png con todos los posibles .zips que haya en una carpeta, y busca en el nombre las coincidencias, una vez encuentra esa coincidencia (o varias), renombra dicho .png al mismo nombre que el .zip que concide en su mayor parte en el nombre (espero haberme explicado xD).

Un script asi es posible? alguna idea para trabajar con ello? en plan:
FC archivo1.txt archivo2.txt, que era para comparar archivos o algo asi no? no se, tengo muy dejado el batch y me esta costando retomarlo tela  ;D

Venga gracias!


« Última modificación: 21 Junio 2016, 03:40 am por davoker » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: ¿Se puede hacer este script?
« Respuesta #1 en: 21 Junio 2016, 11:05 am »

Como poder, se puede llevar a cabo la implementación de un algoritmo home-made, o siguiendo las bases de algún algoritmo aritmético específico (el cual yo desconozco) para optimizar ese tipo de comparación.

Ahora, ¿hacerlo en Batch? ...no. Es un lenguaje demasiado limitado, es inutil tan siquiera plantearselo, e intentarlo.

Para hacerlo en cualquier otro lenguaje capacitado primero tendrías que explicar las reglas de comparación/descarte más que nada para saber como narices se deberían evaluar los caracteres y las coincidencias de strings, y también para saber si ya existe un algoritmo aritmético que te pueda servir para implementarlo como un algoritmo de programación. En fin, dar todos los detalles posibles a ese nivel. De lo contrario, sinceramente ...no se que esperas que te digamos ni hagamos.

Saludos!


« Última modificación: 21 Junio 2016, 11:19 am por Eleкtro » En línea



davoker

Desconectado Desconectado

Mensajes: 36


Ò0ó


Ver Perfil WWW
Re: ¿Se puede hacer este script?
« Respuesta #2 en: 21 Junio 2016, 15:16 pm »

Como poder, se puede llevar a cabo la implementación de un algoritmo home-made, o siguiendo las bases de algún algoritmo aritmético específico (el cual yo desconozco) para optimizar ese tipo de comparación.

Ahora, ¿hacerlo en Batch? ...no. Es un lenguaje demasiado limitado, es inutil tan siquiera plantearselo, e intentarlo.

Para hacerlo en cualquier otro lenguaje capacitado primero tendrías que explicar las reglas de comparación/descarte más que nada para saber como narices se deberían evaluar los caracteres y las coincidencias de strings, y también para saber si ya existe un algoritmo aritmético que te pueda servir para implementarlo como un algoritmo de programación. En fin, dar todos los detalles posibles a ese nivel. De lo contrario, sinceramente ...no se que esperas que te digamos ni hagamos.

Saludos!
No hombre, no espero que nadie me haga nada, no sabia que en batch esto no se podia hacer y por eso preguntaba si era posible, en el caso de que si fuera posible hacer algo asi en batch, lo que esperaba era alguna base con la que trabajar, o ideas para tener algo con lo que empezar vaya, no busco que me hagan las cosas, no va conmigo.

Si tenemos que pasar a un lenguaje como tal, se me escapa de las manos, y no sabria como dar los datos que pides mas haya de la explicacion que doy arriba.

Gracias de todas formas, un saludin.
En línea

Echizen

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: ¿Se puede hacer este script?
« Respuesta #3 en: 21 Junio 2016, 16:52 pm »

en bash (linux) se puede hacer. me imagino hacer un listado con los nombres de la carpeta "A" y despues ir comparando nombre por nombre con todos los archivos de la carpeta "B" en busqueda de coincidencias. obviamente el scripting para eso es bastante limitado, pero se puede hacer algo simple y funcional.

me imagino el código algo como...

Código
  1. #obtener listado
  2. LISTA=$(ls -l /carpetaA |awk '{print $9}')
  3.  
  4. #cantidad de elementos en al lista
  5. CANT=$(wc -l $LISTA |awk 'print $1')
  6.  
  7. #creamos un contador
  8. CONT=1
  9.  
  10. #bucle para recorrer el listado
  11. until [ $CONT -gt $CANT ]; do
  12.  
  13.   #obtener nombre de archivo a comparar
  14.   ARCHIVO_ACTUAL=$(echo $LISTA |sed -n '${CONT}p')
  15.  
  16.   buscar archivos en la carpeta B que contengan el nombre del archivo actual
  17.   ls /carpetaB |grep ${ARCHIVO_ACTUAL%.*}
  18.   #                                   ^   esto es para que no tome en cuenta la extensión del archivo
  19.  
  20. #
  21. # después de aca vos veras que haces con las coincidencias...
  22. #
  23. done
  24.  

asi es como yo lo encararía con bash. me imagino que en batch se debe poder hacer lo mismo, no creo que windows sea tan pobre...

Saludos!
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: ¿Se puede hacer este script?
« Respuesta #4 en: 21 Junio 2016, 19:44 pm »

Si tenemos que pasar a un lenguaje como tal, se me escapa de las manos, y no sabria como dar los datos que pides mas haya de la explicacion que doy arriba.

Pues por ejemplo: si el nombre de archivo original se llama "andeandara", podrías intentar explicar cual de estos nombres debería seleccionarse y por qué:

  • andeandaraa
  • aandeandara
  • andeandará
  • ándeandara



me imagino que en batch se debe poder hacer lo mismo, no creo que windows sea tan pobre...

No, ese script no es facilmente reproducible. El motor RegEx de Batch es lo más limitado que puedas imaginar, solo sirve para parsear, no para transformar, por ende no existe un equivalente de sed, y de awk tampoco, al menos no de una forma tan directa, puesto que primero se debe declarar un tipo de búcle para obtener el buffer de salida del comando que sirve para listar archivos en una carpeta, y luego una variable que servirá para contar cada linea ...todo esto sin soporte nativo para Arrays ni la asignacion de la salida de un comando a una variable.
Eso es lo que vuelve tedioso a Batch, me refiero, lo que nos costaría un par de lineas de código en otro lenguaje, se convierte en 20 lineas si usamos Batch.

Pero no es cosa de Windows, sino de Batch, pues su propósito no es ser un lenguaje de programación. Windows tiene integrado el soporte para diversos lenguajes de scripting, como VBS, por ejemplo, un lenguaje en el que si que se podría elaborar un código parecido al que has publicado sin demasiadas complicaciones.

Saludos
« Última modificación: 21 Junio 2016, 20:06 pm por Eleкtro » En línea



davoker

Desconectado Desconectado

Mensajes: 36


Ò0ó


Ver Perfil WWW
Re: ¿Se puede hacer este script?
« Respuesta #5 en: 21 Junio 2016, 23:33 pm »

Gracias a los 2, voy a ver que puedo hacer con tu script @Echizen, se agradece.

@Eleкtro Las variantes del nombre original serian todas las que pillase el script, es decir, si el nombre original es "andeandara.zip", y tenemos 3 archivos parecidos como "andeandara1.png, andeandaraX.png y andeandaraT.png", me valdria perfectamente que renombrara esos 3 archivos PNG igual que el ZIP orignal, pero no pueden llevar los 3 PNG el mismo nombre, si me pregunatara si quiero sobreescribir ya me preocuparia yo de la decision.

Es preferible digamos que me joda 50 archivos si con ello consigo renombrar 5000 correctamente, no se si me explico jeje

Venga un saludin, voy a probar eso a ver como lo apaño.
En línea

177600531

Desconectado Desconectado

Mensajes: 134


Forever in Darkness


Ver Perfil
Re: ¿Se puede hacer este script?
« Respuesta #6 en: 22 Junio 2016, 02:42 am »

No entiendo muy bien al final como quieres que se renombren los archivos, prueba con esto en python.

Código
  1. # -*- coding: utf-8 -*-
  2.  
  3. import glob
  4. import os
  5.  
  6. os.system("clear")
  7.  
  8. original = raw_input("Coincidencias # ")
  9. extensio = raw_input("Extension     # ")
  10.  
  11. b = original + "*"
  12. c = glob.glob(b)
  13.  
  14. d = len(c)
  15. print ""
  16. print "He obtenido", d, "coincidencias!"
  17. print ""
  18. procede = raw_input("Proceder? y/n # ")
  19.  
  20. if procede == "y":
  21.    e = 0
  22.    for f in c:
  23.        e += 1
  24.        g = str(e)
  25.        os.rename(f, original+g+extensio)
  26.    print "Done!"
  27. else:
  28.    pass
« Última modificación: 22 Junio 2016, 02:46 am por 177600531 » En línea

davoker

Desconectado Desconectado

Mensajes: 36


Ò0ó


Ver Perfil WWW
Re: ¿Se puede hacer este script?
« Respuesta #7 en: 2 Julio 2016, 03:58 am »

No entiendo muy bien al final como quieres que se renombren los archivos, prueba con esto en python.

Código
  1. # -*- coding: utf-8 -*-
  2.  
  3. import glob
  4. import os
  5.  
  6. os.system("clear")
  7.  
  8. original = raw_input("Coincidencias # ")
  9. extensio = raw_input("Extension     # ")
  10.  
  11. b = original + "*"
  12. c = glob.glob(b)
  13.  
  14. d = len(c)
  15. print ""
  16. print "He obtenido", d, "coincidencias!"
  17. print ""
  18. procede = raw_input("Proceder? y/n # ")
  19.  
  20. if procede == "y":
  21.    e = 0
  22.    for f in c:
  23.        e += 1
  24.        g = str(e)
  25.        os.rename(f, original+g+extensio)
  26.    print "Done!"
  27. else:
  28.    pass
Hola, gracias amigo, mira al final encontre lo que buscaba pero ya hecho xD de hecho hay varias aplicaciones que lo hacen, y se mueven por el mundillo del arcade, Hyperspin y demas frontends, te pongo de ejemplo 2 que hacen lo que queria, Hyperspin_RomManager y Tru_Match, esta ultima ademas no es solo para cosas referentes a la emulacion arcade, vale para cualquier tipo de archivo.

Echales un vistazo si quieres, asi ves que es lo que buscaba exactamente, estos programas o te mueves por ese mundillo o no das con ellos, estan en paginas un poco cerradas, para el que las conozca dira que no, pero no das con esas paginas de casuliadad xD

Venga un saludo y gracias por la ayuda ^^
En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: ¿Se puede hacer este script?
« Respuesta #8 en: 20 Julio 2016, 21:32 pm »

Si quieres renombrar ficheros sin tener tu que decir el nombre que quieres que se les ponga puedes utilizar nombre + random.randint(0,50000) asi cada fichero seguramente tuviera un nombre distinto nose si es eso lo que buscabas.
Saludos

PD: Tambien si lo que quieres es comparar nombres de fichero poniendo la extension fuera puedes hacer un if fichero.startswith('nombre_fichero').... y que hiciera un accion  automatizando algo asi como una copia en la misma carpeta con diferente extension y borrando el fichero que tenia la extension distinta (esto va en funcion de lo que quieras que haga)
« Última modificación: 20 Julio 2016, 21:35 pm por Poyoncio » En línea

Curso de ensamblador desde cero
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[MOD] se puede hacer este menu de dvd?
Multimedia
M-a-t-d 0 1,943 Último mensaje 20 Septiembre 2007, 20:28 pm
por M-a-t-d
Hola majos, alguien me puede hacer un simple script, que yo no se....
Scripting
WildFroVII 1 2,599 Último mensaje 30 Agosto 2008, 00:42 am
por Ragnarok
Alguien sabe donde se puede conseguir este fabuloso script?
Desarrollo Web
ENCUENTROSWEB 3 3,691 Último mensaje 26 Diciembre 2011, 23:54 pm
por ENCUENTROSWEB
[BATCH] Donde falla este script. Alguien me puede ayudar?. Gracias.
Scripting
legolas266 5 6,181 Último mensaje 14 Marzo 2013, 13:28 pm
por Eleкtro
Hacer un menú sencillo con este Script
Scripting
Meta 4 3,624 Último mensaje 22 Noviembre 2017, 14:20 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines