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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: [1] 2
1  Programación / Scripting / [VBS] Detectar nombre en renombrado masivo en: 28 Julio 2015, 00:04 am
Hola, lo que quiero hacer prácticamente ya está hecho, sólo me falta hacer la tarea algo más inteligente al detectar si un nomobre ya existe para evitar que por ejemplo si quiero cambiar "Luis" por "José Luis" provoque "José José Luis".

La base es tirar de un txt, donde habrá un listado por líneas, en cada cual habrá un par de palabras, indicando la palabra a cambiar y la nueva palabra: Luis-José Luis.

Código:

Código
  1. Option Explicit
  2.  
  3. Dim fso, fso2, strNombreAnterior, StrNombreNuevo, RutaNombres, RutaArchivo, ListaArchivos, Archivo, strContenidoAnterior, strContenidoNuevo, NombresFila, FilaPartida,objFile,value, word
  4.  
  5. Set fso=CreateObject("Scripting.FileSystemObject")
  6. Set fso2=CreateObject("Scripting.FileSystemObject")
  7. Const Lectura = 1
  8. Const Escritura = 2
  9.  
  10.  
  11. RutaNombres="C:\Users\Isra\Desktop\lista.txt"
  12. RutaArchivo="C:\Users\Isra\Desktop\Prueba.txt"
  13.  
  14. 'Establecemos los objetos
  15. Set ListaArchivos = fso.OpenTextFile(RutaNombres,Lectura)
  16. Set Archivo=fso2.OpenTextFile(RutaArchivo,Lectura)
  17.  
  18. 'Leemos el archivo a modificar
  19. strContenidoNuevo=Archivo.ReadAll
  20.  
  21. Archivo.close
  22.  
  23. Set objFile = fso.OpenTextFile(RutaArchivo, Escritura)
  24.  
  25.  
  26. 'Lee línea por línea para saber los valores a modificar en un archivo de texto
  27. Do Until ListaArchivos.AtEndOfStream
  28. 'Lee la línea entera
  29. NombresFila = ListaArchivos.ReadLine
  30.  
  31. 'Partimos la línea asignando cada valor a un array
  32. FilaPartida=split(NombresFila ,"-")
  33.  
  34. 'Asignamos a cada variable su valor del array por línea
  35. strNombreAnterior=Trim(cstr(FilaPartida(0)))
  36. strNombreNuevo=Trim(cstr(FilaPartida(1)))
  37.  
  38. 'Comprobamos valores
  39. 'wscript.echo strNombreAnterior
  40. 'wscript.echo strNombreNuevo
  41. value = InStr(strContenidoNuevo, strNombreNuevo)
  42. 'wscript.echo value
  43. [color=red]if value <> 1 then [/color]
  44. strContenidoNuevo=Replace(strContenidoNuevo, strNombreAnterior, strNombreNuevo,1,-1,0)
  45. [color=red]end if [/color]
  46. Loop
  47.  
  48. 'wscript.echo strContenidoNuevo
  49. ListaArchivos.close
  50.  
  51. objFile.WriteLine strContenidoNuevo
  52. objFile.Close

El problema con value = InStr(strContenidoNuevo, strNombreNuevo) es que al detecta que existe ya no interpreta ninguna otra más con el nombre StrNombreNuevo. Si quito la parte en rojo, cada vez que ejecute los nombres compuesto iran ganando el primer nombre reitativamente.

Pensé en hacer un bucle tal que:
Código
  1. for each word in split(strContenidoNuevo, "")
  2. value = InStr(strContenidoNuevo, strNombreNuevo)
  3. 'wscript.echo value
  4. [color=red]if value <> 1 then [/color]
  5. strContenidoNuevo=Replace(strContenidoNuevo, strNombreAnterior, strNombreNuevo,1,-1,0)
  6. [color=red]end if [/color]
  7. next
  8.  

Sin embargo, el resultado no es el esperado. Imagino que será una trivialidad pero ahora mismo estoy ofuscado ^^'. Gracias.
2  Programación / Scripting / [BATCH] Copiado con confirmacion de correcta escritura en: 24 Octubre 2013, 02:13 am
Hola a todos, he creado un bat para copiar una serie de archivos en un disco externo y mi intencion es que me saque en pantalla los archivos que se han copiado y si ha habido fallos o no. El script es el siguiente, sin embargo, no se si realmente cumple el objetivo del script o conceptualmente me he equivocado.

Código
  1. @echo off
  2. Title Copiar
  3.  
  4. if not exist "I:\Carpeta" md "I:\Carpeta"
  5.  
  6. for %%@ in (*.mkv) do (
  7.  
  8. copy "%%@" "I:\Carpeta" /Y 1>nul & Echo El archivo: "%%@" fue copiado correctamente. || Echo Hubo un fallo al copiar el archivo "%%@".
  9.        echo.
  10.  
  11. )
  12.  
  13. pause>nul&exit

He pensado que si está mal, quizás con %ERRORLEVEL% podría sería mejor pero ya implementarlo a esa linea se me escapa. Gracias.
3  Programación / Scripting / [Python] Scrollbar dentro de un listbox en: 20 Agosto 2013, 05:48 am
Bueno estoy diseñando una UI para un programa... todo es relativamente precario pues estoy aprendiendo poco a poco como manejarlo. He conseguido insertar un scrollbar dentro del listbox, sin embargo el problema radica en que el scrollbar no desaparece nunca, ni cuando no hay elementos en el listbox. Estoy probando usando Grid, imagino que con pack se puede hacer de otra manera, lo digo pq por ahora me interesa hacerlo con este comando.

El codigo:

Código
  1. import os, sys
  2. import win32api
  3. import platform
  4. import gettext
  5. import locale
  6. import sys
  7. from time import sleep
  8.  
  9. #GUI para EACUI
  10. try:
  11.    import tkinter
  12.    from tkinter import *
  13. except ImportError:
  14.    raise ImportError("Se requiere el modulo Tkinter")
  15.  
  16. #Configure gettext Define the '_()' function
  17.  
  18. APP_NAME = "EACUI"
  19. LOCALE_DIR = ('C:\Locale\es\LC_MESSAGES')
  20.  
  21. gettextt = gettext.translation(APP_NAME, LOCALE_DIR,fallback=True)
  22. _ = gettextt.gettext
  23.  
  24. #Ventana
  25. root = tkinter.Tk(screenName=None, baseName=None, className='Tk', useTk=1)
  26.  
  27. '''Titulos'''
  28. root.wm_title("Eac3to GUI v0.0")
  29. #root.title("Eac3to GUI v0.0")
  30. root.wm_frame()
  31.  
  32. '''Etiqueta'''
  33. #etiqueta=tkinter.Label(root,text="Eac3to GUI v0.0")
  34. #etiqueta.grid(row=1, column=1)
  35.  
  36.  
  37. '''Dimension ventana'''
  38. root.wm_maxsize(1000, 1000)
  39. root.wm_minsize(640,640)
  40. root.wm_geometry('640x640')
  41. root.wm_iconbitmap('.\icon.ico')
  42.  
  43.  
  44. '''Menus'''
  45. #File
  46. menu = tkinter.Menu(root)
  47. root.config(menu=menu)
  48. menu1_1 = tkinter.Menu(menu, tearoff=0)
  49. menu.add_cascade(label=_("File"), menu=menu1_1)
  50. menu1_1.add_command(label=_("Open"))
  51. menu1_1.add_command(label=_("Close"))
  52. #Options
  53. menu1_2 = tkinter.Menu(menu, tearoff=0)
  54. menu.add_cascade(label=_("Options"), menu=menu1_2)
  55. menu1_2.add_command(label=_("Setup"),command=lambda: setup(_("Setup")))
  56. menu1_2.add_separator()
  57. menu1_2_1 = tkinter.Menu(menu1_2, tearoff=0)
  58. menu1_2.add_cascade(label=_("Language"), menu=menu1_2_1)
  59. menu1_2_1.add_command(label=_("English"),command=lambda: language(_("English")))
  60. menu1_2_1.add_command(label=_("Spanish"),command=lambda: language(_("Spanish")))
  61. #Help
  62. menu1_3 = tkinter.Menu(menu1_2, tearoff=0)
  63. menu.add_cascade(label=_("Help"), menu=menu1_3)
  64. menu1_3.add_command(label=_("About"),command=lambda: about(_("About")))
  65.  
  66. '''Ventana de carga con scrollbar interno usando Grid'''
  67. text = tkinter.Listbox(root)
  68. text.grid(padx=10,pady=10)
  69. text.bindtags((text, root, "all"))
  70. #for i in range(20):
  71.    #text.insert(i,i)
  72. scrl = Scrollbar(root, command=text.yview)
  73. text.config(yscrollcommand=scrl.set)
  74. scrl.grid_rowconfigure(10)
  75. #scrl.grid(ipadx=200,ipady=20,sticky='e',rowspan=5)
  76. scrl.grid(in_=text,ipadx=200,ipady=20,sticky='ns')
  77.  
  78. '''Ventana de carga'''
  79. #windows_load=tkinter.Text(root,height = 1, width=int(root.winfo_width())-580,font=("Times", 12),state=tkinter.NORMAL, cursor='arrow',insertwidth=2,exportselection=1)
  80.  
  81. #windows_load=tkinter.Listbox(root,height=10,width=int(root.winfo_width())-580)
  82. #windows_load.bindtags((windows_load, root, "all"))
  83. #for i in range(20):
  84.    #windows_load.insert(i,i)
  85.  
  86. #windows_load.pack(anchor='nw',side=TOP, fill=Y, expand=FALSE,padx=10,pady=10)
  87.  
  88.  
  89. '''Ejecucion'''
  90. root.mainloop()

¿En donde estoy metiendo la pata?
4  Programación / Scripting / [Python] Aplicacion multilenguaje en: 15 Agosto 2013, 04:34 am
Hola a todos, pues nada estoy intentando hacer una aplicacion GUI para un programa de codificacion de audio. El caso es que me ha llamado siempre la atención, desde que llevo varios años traduciendo el programa mkvmerge, el poder usar GNU. Estoy poco a poco intentando hacer pruebas para poder traducir la interfaz y por ahora dar las opciones de dos lenguajes, English y Español.

El codigo que llevo es este:

Código
  1. #-------------------------------------------------------------------------------
  2. # Name:        EACUI
  3. # Purpose:     Audio encoding with EAC3TO
  4. #
  5. # Author:      Overdrive80
  6. #
  7. # Created:     13/08/2013
  8. # Copyright:   (c) Overdrive80 2013
  9. # Licence:     <your licence>
  10. #-------------------------------------------------------------------------------
  11. import os, sys
  12. import win32api
  13. import platform
  14. import gettext
  15. import locale
  16. import sys
  17.  
  18. #Configure gettext Define the '_()' function
  19. def set_gettext():
  20.    APP_NAME = "EACUI"
  21.    LOCALE_DIR = ('C:\Locale\es\LC_MESSAGES')
  22.  
  23.    t = gettext.translation(APP_NAME, LOCALE_DIR,fallback=True)
  24.    _ = t.gettext
  25.  
  26. def main():
  27.    #Inicializacion de Gettext
  28.    set_gettext()
  29.  
  30.    '''Create a list of asociated programs'''
  31.    lista_programas=['eac3to']
  32.    '''Check arquitecture'''
  33.    def is_x64():
  34.        arquitectura=platform.architecture()
  35.        if arquitectura[0] == '64bit':
  36.            #print "Tu sistema es de 64 bits."
  37.            return True
  38.        else:
  39.            #print "Tu sistema es de 32 bits."
  40.            return True
  41.    '''Seek path by default of installating'''
  42.    def find(ruta, program):
  43.        for root,dirs,files in os.walk(ruta):
  44.            for name in files:
  45.                if program+'.exe'==name:
  46.                    path=os.path.join(root, name)
  47.                    return path
  48.  
  49.    PATH_DEFAULT='C:\\'
  50.    for programa in lista_programas:
  51.        path=find(PATH_DEFAULT, programa)
  52.        if path != None:
  53.            ruta_bus=os.path.split(path)
  54.            print (_('File found %s, in the path %s.')) % programa, ruta_bus[0]
  55.            print (_('Would you like to set this path as access by default to program %s?')) % programa
  56.        else:
  57.            print (_("Not file found %s.")) % programa
  58.            print (_('Would you like set handle program´s path?'))
  59.  
  60. main()
  61.  
  62.  

El archivo "es.mo" es este: https://dl.dropboxusercontent.com/u/19135067/es.mo

El problema radica cuando intento ejecutar el script de manera que coja el "es.mo", me da este error:



Es algo curioso pq he podido generar correctacmente el archivo "es.pot" con:

Código
  1. @echo off
  2. Title .Py to .Pot files
  3. set path=path;C:\Python33\
  4. set /p label="Inserte la etiqueta del idioma (p.e.: es): "
  5. python "C:\Python33\tools\i18n\pygettext.py" -d %label% -o %label%.pot %1
  6. pause&exit

Estoy usando la version 3.2 de python pq la 2, al parecer no tiene implementando gettext.

Espero que me podais echar un cable. Saludos.

EDITO: He conseguido fijar ese problema declarando debajo de la importacion de modulos: "_ =None". Sin embargo, ahora me encuentro este problema:



Hubiera escrito el codigo de otra manera pero me daba fallo al generar el archivo pot, porque gettext no admite expresiones debe ser un formato string.

EDITO2: Solucionado, al menos se ejecuta. Al parecer, todo el fallo ha sido por meter en una funcion el codigo de gettext, cuando debe ir fuera del bloque main. Lo que está tachado y que hice no sirve.
5  Programación / Scripting / [Python] Listar Archivos Carpeta en: 11 Agosto 2013, 22:46 pm
Bueno... hace poco y a modo de hobby me puse a aprender este lenguaje, y aunque soy un mega noob en esto me permito postear un código para quien quiera criticarlo positiva o negativamente... asi podré seguir mejorando.

Este codigo permite listar los archivos de una carpeta que este en la misma ruta que el script, y lo guarda en un txt. He añadido y no he quitado, un parametro simple de control de ejecucion, a modo de depuracion... aunque podia haber hecho algun try... pero me gustan las ventanitas jiji

Código
  1. #-------------------------------------------------------------------------------
  2. # Name:        Overdrive
  3. # Purpose:     Listar archivos directorio en un txt
  4. #
  5. # Author:      Overdrive
  6. #
  7. # Created:     10/08/2013
  8. # Copyright:   (c) Overdrive 2013
  9. # Licence:     Free
  10. #-------------------------------------------------------------------------------
  11. #import fnmatch
  12. import os
  13. from tkinter import messagebox
  14. import tkinter
  15.  
  16. #Creamos una clase para la ventana de control depuración
  17. class Msgbox(object):
  18.  
  19.    #""" Constructor """
  20.    def __init__(self, text):
  21.        self.text=text
  22.        window = tkinter.Tk()
  23.        window.wm_withdraw()
  24.  
  25.    def msg(self):
  26.        messagebox.showinfo("Ventana de depuración", self.text)
  27.  
  28. def escribir(name):
  29.  
  30.    #Creamos el objeto del archivo de texto
  31.    fd = os.open( name, os.O_RDWR|os.O_CREAT )
  32.    mi_archivo=os.fdopen(fd,"r+")
  33.  
  34.    #Grabamos cada archivo del directorio en el txt, exceptuando el script
  35.    for file in os.listdir('.'):
  36.        if file[-2:] != 'py' and file[-3:] != 'txt':
  37.            mi_archivo.write(str(file)+"\n")
  38.  
  39.    #Cerramos el archivo creado
  40.    mi_archivo.close()
  41.  
  42. def main():
  43.    #Comprobamos si existe .txt y sino lo creamos
  44.  
  45.    if os.path.isfile(str(os.curdir)+"\lista.txt")==False:
  46.        ventana=Msgbox("No existe el fichero.")
  47.        ventana.msg()
  48.        escribir("lista.txt")
  49.    else:
  50.        ventana=Msgbox("Si existe el fichero.")
  51.        ventana.msg()
  52.        os.remove('lista.txt')
  53.        escribir("lista.txt")
  54.  
  55. main()
6  Programación / Scripting / QPF to Chapter file en: 12 Julio 2013, 05:48 am
Hola buenas, estaba intentando hacer un conversor de archivos qpf files (que es un txt con otra extensión) para calcular una serie de codigos de tiempo en base a un numero prefijado de 23.976 frames por segundo.

El caso es que nada mas empezar no me ejecuta la tarea mas basica que es motrar en la consola las lineas del qpf. El código es este:

Código
  1. @echo off
  2. SetLocal EnableDelayEdexpansion
  3.  
  4. @ECHO OFF
  5. FOR /F "tokens=*" %%A IN ("C:\Users\Isra\Desktop\Nueva carpeta\10. QPFILE_NAME.txt") DO CALL:Tratar "%%A"
  6. GOTO:EOF
  7.  
  8. :Tratar
  9.   SET Reg=%~1
  10.   ECHO %Reg%
  11.   GOTO:EOF
  12.  
  13. pause&exit

El formato de un archivo qpf es:

Código:
0 K -1
2616 K -1
16072 K -1
16384 K -1
32440 K -1
34768 K -1

Entonces necesito coger cada numero, tratarlo durante el proceso del for, calcular el codigo de tiempo, e ir almacenandolo en otro txt. El algoritmo sería algo como:

Codigo de tiempo=2616*0,0417083sg=109,1089128sg/60=1,81848188=1min+0,81848188

resto_tiempo=0,81848188*60=49,1089128sg=49sg+109ms

total 1min49sg109ms-->00:01:49.109

Tras calcular el primer resultado tendria que discenir si x>=3600 entonces el resultado que da seria en horas, si x>=60 daria en minutos, x<60 en segundos.

Vamos, pero que me gustaria saber pq no me lista los numeros. Tengo windows8, por si afecta en algo.
7  Programación / Scripting / [BAT] Buscar archivo con un string indicado en: 24 Enero 2013, 05:51 am
Buenas, estoy haciendo una prueba para despues poder implementar una movida absurda de las que me hago en casa ^^. El caso es que intento buscar un archivo por su string para que me devuelva la ruta completa, pero al hacer la comparacion con el IF, el caso es sensitivo. Entonces necesitaria hacer un lowcase.

Me explicare mejor con el codigo, jeje

Código:
set /p nombre="Introduzca el nombre a buscar: "

for /r c:\ %%@ in ("%nombre%.*") do (

if "%%~n@"=="%nombre%" echo %%@

)

Por ejemplo estoy buscando la palabra "megui", pero este archivo esta almacenado con el string "MeGUI". Entonces, si no inserto en el set, lo mismo no me devuelve ningun resultado.
8  Programación / Scripting / [Batch] Buscar carpeta donde se encuentra un portable en: 19 Noviembre 2012, 04:06 am
Buenas, por motivos un tanto raros he creado este script. Mi duda mas bien es para optimizar el codigo a algo que seguramente se pueda hacer mas sencillo que todo el codigo que he usado, y que ahora pongo.

Principalmente sirve para localizar la instalacion de un programa portable, en este caso VirtualDub.

Código
  1. @echo off
  2.  
  3. :: Nos situamos en la siguiente carpeta
  4.  
  5. cd /d "%homedrive%\Program Files (x86)"
  6.  
  7. :Listamos directorios de la carpeta actual y comprobamos si se encuentra Virtualdub en ella
  8.  
  9. dir /b > "%temp%\info_vdub.txt"
  10.  
  11. ::Buscamos coincidencia de string, creamos un archivo de texto para valernos del mensaje de errorlevel.
  12.  
  13. Find /i "virtualdub" < "%temp%\info_vdub.txt" > "%temp%\StringCheck.txt"
  14.  
  15. If %ERRORLEVEL% == 0 (
  16. set "x86=true"
  17. ) else (
  18. set "x86=false"
  19. )
  20. ::Borramos archivos temporales
  21.  
  22. del "%temp%\StringCheck.txt"
  23. del "%temp%\info_vdub.txt"
  24.  
  25. set "path_x86=%cd%"
  26.  
  27. :: Nos situamos en la siguiente carpeta y hacemos mas de lo mismo
  28.  
  29. cd /d "%homedrive%\Program Files"
  30.  
  31.  
  32. dir /b > "%temp%\info_vdub.txt"
  33.  
  34. Find /i "virtualdub" < "%temp%\info_vdub.txt" > "%temp%\StringCheck.txt"
  35.  
  36. If %ERRORLEVEL% == 0 (
  37.  
  38. set "x64=true"
  39. ) else (
  40. set "x64=false"
  41. )
  42.  
  43. ::Borramos archivos temporales
  44.  
  45. del "%temp%\StringCheck.txt"
  46. del "%temp%\info_vdub.txt"
  47.  
  48. set "path_x64=%cd%"
  49.  
  50. ::Info en pantalla
  51.  
  52. Echo VirtualDub esta instalado en:
  53.  
  54. if "%x86%"=="true" (
  55.  
  56. echo %path_x86%
  57. )
  58.  
  59. if "%x64%"=="true" (
  60.  
  61. echo %path_x64%
  62.  
  63. )
  64.  
9  Programación / Scripting / [Batch] Conservar caracteres especiales usando delayedexpansion en: 25 Octubre 2012, 18:40 pm
Buenas, en esta ocasion estoy haciendo un listado de unos archivos matroska, y usando el for con tokens, para seleccionar la parte a guardar en la lista. Al tener que usar enableddelayedexpasion, ciertos caracteres son destruidos. He intentado cambiar el chcp pero sin resultado. El codigo es este:

Código:
@echo off
Title Listar nombres capitulos
Setlocal EnableDelayedExpansion

rem CHCP 850 >nul
if exist "lista.txt" (erase "lista.txt")

for /f "tokens=2 delims=[]" %%i in ('dir /b /o:n "*.mkv"') do (

set "nom=%%i"

echo !nom:~1! >> "lista.txt"
 )

pause

Lo curioso es que si lo ejecuto desde cmd, se muestra perfectamente con sus caracteres.

Original



Queda algo asi sin extenderme:

10  Programación / Scripting / [Batch] Instalador selectivo de updates Windows en: 13 Octubre 2012, 21:57 pm
Hola a todos, el caso es que ya sabeis lo tedioso que puede resultar aplicar las updates de windows manualmente, o de forma automatica cuando su numero asciende a 700 revisiones, como es mi caso. El agente de updates de windows solo me requiere 78 para que este protegido por lo que solo quiero instalar esas. Para ello he utilizado este codigo, para listas todas las updates disponibles:

Código:
@Echo off
Title Instalador con lista
set ruta=F:\HDD negro\Utiles y programas\Programas De Microsoft\Microsoft_Updates\updates\

for /f %%i in ('dir /b /o:n "*kb*.msu"') do (

if not exist "updates_total.txt" (
echo %%i >> "updates_total.txt" )
)

::2 parte
for /f "tokens=1 delims=*" %%i in (updates.txt) do (find /i "%%i" "%ruta%updates_total.txt" >> "updates_instalar.txt"  )

El archivo updates.txt tiene un formato asi:

Código:
*KB2655992*
*KB2691442*
*KB2698365*
*KB3719985*
*KB2506212*
*KB2507618*
*KB2536276*
*KB3544893*
*KB2560656*
*KB2564958*

El caso es que find funciona bien, pero lo que devuelve en el archivo "updates_instalar.txt" tiene un formato muy raro, y yo esperaba que fuese simplemente el nombre de la revision, para posteriormente usar este archivo de texto en otro FOR, y las ejecute. El formato erroneo es este:

Código:
---------- F:\HDD NEGRO\UTILES Y PROGRAMAS\PROGRAMAS DE MICROSOFT\MICROSOFT_UPDATES\UPDATES\UPDATES_TOTAL.TXT
Windows6.1-KB2655992-x64.msu 

---------- F:\HDD NEGRO\UTILES Y PROGRAMAS\PROGRAMAS DE MICROSOFT\MICROSOFT_UPDATES\UPDATES\UPDATES_TOTAL.TXT
Windows6.1-KB2691442-x64.msu 

.....

Imagino que habra alguna manera de eliminar los encabezados esos.

Inicialmente pense que podria kizas, listar las updates que el agente de windows update te informa para instalar, pero no tengo ni idea de como se podria hacer, quizas con wmic. Lo que si he visto por la red es la manera de listar las updates instaladas...

Gracias de antemano.
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines