Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Eleкtro en 15 Enero 2012, 15:17 pm



Título: (Solucionado) [VBS] como hacer este bucle?
Publicado por: Eleкtro en 15 Enero 2012, 15:17 pm
Hola

Necesito una ayudita con este script

Me surgen 3 problemas:

el primero es que no se como definir el "CurrentDir" osea para que el script trabaje en el directorio actual.
el segundo es que tampoco se como definir ParseName("*.TTF") para que se tome en cuenta todos los archivos .ttf del directorio corriente
Y el tercer problema es, que una vez resuelto los 2 primeros, no sabría como aplicarlo al For xD

Código
  1. set winsh = CreateObject("WScript.Shell")
  2. set winenv = winsh.Environment("Process")
  3. windir = winenv("WINDIR")
  4.  
  5. Set objShell = CreateObject("Shell.Application")
  6. Set objFolder = objShell.Namespace("%CURRENTDIR%")
  7. Set objFolderItem = objFolder.ParseName("*.TTF")
  8.  
  9. For each N in objFolderItem
  10.   N.InvokeVerb("Install")
  11. next

Gracias...


Título: Re: [VBS] como se hace un bucle? xD
Publicado por: Eleкtro en 4 Febrero 2012, 19:28 pm
Up!

Una ayudita porfavor  :-(


Título: Re: [VBS] como hacer este bucle?
Publicado por: $Edu$ en 4 Febrero 2012, 23:05 pm
Explica que es lo que queres hacer con el script porque me parece que estas haciendo cosas de mas.


Título: Re: [VBS] como hacer este bucle?
Publicado por: Flamer en 5 Febrero 2012, 01:40 am
hola hacker aver si te sirve este code ya que yo tengo xp y tu 7
Citar
set objarchivo=createobject("scripting.filesystemobject")
set objshell=createobject("wscript.shell")
carpeta=objshell.expandenvironmentstrings("%systemroot%")
set f=objarchivo.getfolder(carpeta)
set fc=f.files
for each f1 in fc
   if mid(f1.name,len(f1.name)-3,4)=".exe" then
   msgbox f1.name
   end if
next
saludos hacker espero que te sirva
el code que puse busca los exe tu modificalo para x formato
no todo telo boy a entregar en charola de plata
saludos flamer


Título: Re: [VBS] como hacer este bucle?
Publicado por: Eleкtro en 5 Febrero 2012, 09:27 am
Explica que es lo que queres hacer con el script porque me parece que estas haciendo cosas de mas.

Lo que quiero hacer es un script que instale los archivos de fuentes de texto .ttf  a la carpeta fonts de windows.

El script original es casi identico solo le he modificado 3 palabras, porque el original trabajaba solamente sobre 1 archivo .ttf, osea, el script funcionaba, pero necesito que trabaje con todos los archivos .ttf del directorio donde ejecute el vbs.


hola hacker aver si te sirve este code ya que yo tengo xp y tu 7 saludos hacker espero que te sirva

Te lo agradezco pero tu script solo funciona con el primer archivo, es decir, solo muestra un msgbox del primer archivo que encuentra en "C:\Windows\archivo.ttf"

He intentado modificarlo pero es bastante dificil para mi:

Código:
carpeta=objshell.expandenvironmentstrings("C:\Users\Administrador\Desktop\Nueva carpeta")
De todas formas eso no me serviría, no estoy definiendo el directorio actual como se haría en batch por ejemplo así:
Código:
%CD%

Pero ahora viendo tu script al menos ya se como definir el tipo de archivo "ttf", gracias.

No pretendo que me lo hagan todo, si alguien me diera esta información podría intentar modificarlo yo:

- definir el "CurrentDir" osea para que el script trabaje en el directorio actual en vez de %systemroot% en tu script

- Y que el "FOR" no se detenga en el primer resultado, Aunque esta información creo que debe estar en el tutorial de novlucker, pero sin la primera información me quedo en las mismas :(


Gracias a los dos


Título: Re: [VBS] como hacer este bucle?
Publicado por: Eleкtro en 5 Febrero 2012, 09:52 am


Vale, he avanzado un poquito, ya no se como seguir ni corregir los errores que tengo:




Código
  1. Dim sCurPath
  2. sCurPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
  3.  
  4.  
  5. set winsh = CreateObject("WScript.Shell")
  6. set winenv = winsh.Environment("Process")
  7. windir = winenv("WINDIR")
  8.  
  9.  
  10. Set objShell = CreateObject("Shell.Application")
  11. carpeta=objshell.expandenvironmentstrings("sCurPath")
  12. set f=objarchivo.getfolder(carpeta)
  13. set fc=f.files
  14.  
  15. For each f1 in fc
  16. if mid(f1.name,len(f1.name)-3,4)=".ttf" then
  17.   f1.InvokeVerb("Install")
  18.   end if
  19. next


Título: Re: [VBS] como hacer este bucle?
Publicado por: $Edu$ en 5 Febrero 2012, 16:35 pm
Porque tiene que ser vbs? si lo sabes hacer en batch.

Digo esto porque yo haria simplemente esto:

Código
  1. Dim shell
  2.  
  3. Set shell = CreateObject("WScript.Shell")
  4.  
  5. shell.run "copy /Y *.ttf C:\*.ttf" , vbhide
  6.  
  7.  

O algo asi y listo xD a no ser que tenga que ser vbs puro, pero vamos que funcionar funciona, no se porque no lo pensaste, ya me diras xD

edit: Creo que no anda, pero ta el mensaje espero que te llegue xD


Título: Re: [VBS] como hacer este bucle?
Publicado por: Eleкtro en 5 Febrero 2012, 17:16 pm
Código:
[quote author=$Edu$ link=topic=350544.msg1715816#msg1715816 date=1328456136]
Porque tiene que ser vbs? si lo sabes hacer en batch.
shell.run "copy /Y *.ttf C:\*.ttf" , vbhide
[/quote]

Eso lo se hacer, pero no me sirve porque en batch no se pueden instalar fuentes (En windows 7 no) , con un "copy" no es suficiente, la única forma es dandole click derecho al archivo, o un programa o script vbs que haga el trabajo

:(



Título: Re: [VBS] como hacer este bucle?
Publicado por: Flamer en 5 Febrero 2012, 20:22 pm
modificastes la linea asi
Citar
carpeta=objshell.expandenvironmentstrings
("%systemroot%\fonts")
y aber si te entendi los archivos .ttf estan en esa carpeta y tu los quieres instalar
si estan en la carpeta fonts el script deve de funsionar y mostrarte el msgbox y sino es el windows
con respecto ala instalacion no se como see instalan o que comandos se usan pero si medises que comando los instala te podre ayudar eso creo
saludos flamer y sus angeles del infierno y sus traficantes de muerte


Título: Re: [VBS] como hacer este bucle?
Publicado por: Eleкtro en 5 Febrero 2012, 20:39 pm
con respecto ala instalacion no se como see instalan o que comandos se usan pero si medises que comando los instala te podre ayudar eso creo

El comando del bucle:   N.InvokeVerb("Install")


Título: Re: [VBS] como hacer este bucle?
Publicado por: Flamer en 6 Febrero 2012, 00:58 am
El comando del bucle:   N.InvokeVerb("Install")
y funciona calalo con uno solo y ya con el script que te puse se ase
 


Título: Re: [VBS] como hacer este bucle?
Publicado por: Eleкtro en 22 Febrero 2012, 10:14 am
y funciona calalo con uno solo y ya con el script que te puse se ase

Sorry por tardar, Nada, No hay manera flamer, No me sale  :(

¿Nadie sabe hacer esto en python o ruby? También me serviria xD

Voy a hacer algún intento con ruby.

Salu2

Este es el code original en el que quiero realizar un FOR:

Código
  1. Set objShell = CreateObject("Shell.Application")
  2. Set objFolder = objShell.Namespace("<Folder or Share Location>")
  3. Set objFolderItem = objFolder.ParseName("<TTF File Name>")
  4. objFolderItem.InvokeVerb("Install")




EDITO:

Al fin he encontrado este script que hace lo que quiero

Fin de la historia  ::)

No he logrado hacer el maldito bucle pero Gracias por vuestra ayuda y paciencia

Código
  1. Set ofso = CreateObject("Scripting.FileSystemObject")
  2. SourceFolder = ofso.GetParentFolderName(Wscript.ScriptFullName)
  3.  
  4. Const FONTS = &H14&
  5.  
  6. Set objShell  = CreateObject("Shell.Application")
  7. Set oSource   = objShell.Namespace(SourceFolder)
  8. Set oWinFonts = objShell.Namespace(FONTS)
  9.  
  10. Set rxTTF = New RegExp
  11. rxTTF.IgnoreCase = True
  12. rxTTF.Pattern = "\.ttf$"
  13.  
  14. FOR EACH FontFile IN oSource.Items()
  15.    IF rxTTF.Test(FontFile.Path) THEN  
  16.        oWinFonts.CopyHere FontFile.Path
  17.    END IF
  18. NEXT