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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [VBS] Iniciación, dudas rutas.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [VBS] Iniciación, dudas rutas.  (Leído 3,777 veces)
KZN

Desconectado Desconectado

Mensajes: 98



Ver Perfil
[VBS] Iniciación, dudas rutas.
« en: 28 Enero 2016, 17:25 pm »

Hola, estoy empezando con el lenguaje VBScript y quería saber como llego a las siguientes rutas %appdata%
%userprofile%
También tengo un problema con las carpetas, por ejemplo hay una carpeta que tiene el nombre

123456.default

esa carpeta independientemente del nombre siempre tiene el ".default" y yo en Batch usaba esta variable para entrar en la carpeta " cd "*.default" " y ahora nose como hacer lo mismo en VBS.
Espero me ayuden, gracias futuros comentarios siempre es de agradecer la ayuda.

(Si e cometido algún error lo siento, ya hacía bastante que no entraba al foro y no me acuerda si me salto alguna regla.)


En línea

fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: [VBS] Iniciación, dudas rutas.
« Respuesta #1 en: 28 Enero 2016, 18:11 pm »

Código
  1. Set Shell = CreateObject( "WScript.Shell" )
  2. Msgbox Shell.ExpandEnvironmentStrings("%APPDATA%")

Para las carpetas.... ¿Porqué no pones el nombre de la carpeta entera y listo?. Creo que no hay nada similar en VBS.



En línea

Un byte a la izquierda.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [VBS] Iniciación, dudas rutas.
« Respuesta #2 en: 28 Enero 2016, 22:50 pm »

yo en Batch usaba esta variable para entrar en la carpeta " cd "

Para cambiar el directorio de trabajo actual puedes utilizar la siguiente propiedad:

Ejemplo:
Código
  1. Set WshShell = WScript.CreateObject("WScript.Shell")
  2. dirPath = ".\.default"
  3.  
  4. WshShell.CurrentDirectory = dirPath
  5.  
  6. Wscript.Echo(WshShell.CurrentDirectory)
  7. Wscript.Quit(0)

Para expandir variables de entorno ya te explicaron como hacerlo, solo quiero añadir que se expandirá cualquier variable que exista en el string que recibe la función, es decir, para aprovechar esta funcionalidad y evitar código innecesario siempre puedes llamar a la función de la siguiente manera (en caso de que lo necesites):
Código
  1. ExpandEnvironmentStrings("%AppData%\.default")

Saludos
« Última modificación: 28 Enero 2016, 22:58 pm por Eleкtro » En línea

KZN

Desconectado Desconectado

Mensajes: 98



Ver Perfil
Re: [VBS] Iniciación, dudas rutas.
« Respuesta #3 en: 29 Enero 2016, 00:18 am »

No me e explicado bien, os voy enseñar el código batch para que me entendaís

Código
  1. cd %appdata%
  2.  
  3. cd Micarpeta\MiSubcarpeta
  4.  
  5. cd "*.default"

Esa carpeta cada vez que cambio de ordenador es renombrada por ejemplo

PC 1: 123456.default

PC 2: 4fasdjkt.default

PC 3: 57tgjtekl.default

esa carpeta con nombre aleatorio (salvo el .default) tiene unos archivos que siempre recojo por extensión

Código
  1. xcopy "*.png" "C:\ProgramData" /Y /I >nul 2>&1

Y ahora busco hacer lo mismo en VBS e elaborado este pequeño code

Código
  1. Set objShell = CreateObject("WScript.Shell")
  2. Set PV1 = CreateObject("Scripting.FileSystemObject")
  3. Set PV2 = CreateObject("Scripting.FileSystemObject")
  4.  
  5. PV2.createfolder "C:\ProgramData\Carpeta"
  6. strCommand = "cmd /k cd %appdata%"
  7. strCommand = "cmd /k cd Micarpeta\MiSubcarpeta"
  8.  
  9. PV1.copyfile "%USERPROFILE%\123456.default\*.png","C:\ProgramData\Carpeta\"
  10.  
MsgBox "Operación completada",266304

Espero me podaís ayudar y gracias a los anteriores por su colaboración.
« Última modificación: 29 Enero 2016, 00:55 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [VBS] Iniciación, dudas rutas.
« Respuesta #4 en: 29 Enero 2016, 01:00 am »


 @KZN                                          
 Usa las etiquetas Geshi para insertar código  




Me arriesgo a deducir que el problema real es querer averiguar el nombre de carpeta del perfil por defecto de Firefox ya que precisamente se generan con ese tipo de nombre bajo el mismo directorio principal,
si me equivoco y no son tus intenciones entonces disculpa, pero si no me equivoco entonces no se por que motivo no mencionas ese detalle y deberias explicar el problema real para poder darte soluciones óptimas, ya que del modo en el que lo estás intentando hacer no es para nada una solución óptima, por que preguntando por otras cosas como averiguar el nombre de carpetas basándose en un patrón de búsqueda lo único que conseguirás es complicarlo todo (y sería una pérdida de tiempo para los demás).

Puedes obtener el nombre de los directorios simplemente parseando la propiedad Path del archivo de inicialización (.ini) de perfiles de Firefox, ubicado exactamente en C:\Users\usuario\AppData\Roaming\Mozilla\Firefox\Profiles.ini.

Por favor, específica si ese es tu propósito real para explicarte como parsear el archivo, o de lo contrario para explicarte otra solución distinta al problema que has mencionado con una solución de búsqueda de carpetas según un patrón de búsqueda...

Saludos
« Última modificación: 29 Enero 2016, 01:10 am por Eleкtro » En línea

KZN

Desconectado Desconectado

Mensajes: 98



Ver Perfil
Re: [VBS] Iniciación, dudas rutas.
« Respuesta #5 en: 29 Enero 2016, 01:06 am »

Si, como siempre Elektro me lees la mente, efectivamente, es hay a donde quiero acceder.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [VBS] Iniciación, dudas rutas.
« Respuesta #6 en: 29 Enero 2016, 02:09 am »

Si, como siempre Elektro me lees la mente, efectivamente, es hay a donde quiero acceder.

El siguiente algoritmo no es perfecto, he intentado tener en cuenta que las propiedades del archivo ini pueden estar cambiadas de posición, pero en un 99% de los casos te funcionará ya que no hay por que pensar que alguien manipule este archivo para añadir perfiles manualmente...:

Código
  1. Set fso      = CreateObject( "Scripting.FileSystemObject" )  
  2. Set wshShell = CreateObject( "WScript.Shell" )
  3.  
  4. Function SetProfilePath( directorypath, isRelative )
  5.  
  6.    If ( isRelativePath ) then
  7.        SetProfilePath = (firefoxDirPath & "\" & directorypath)
  8.  
  9.    Else
  10.        SetProfilePath = directorypath
  11.  
  12.    End If
  13.  
  14. End Function
  15.  
  16. firefoxDirPath   = wshShell.ExpandEnvironmentStrings( "%AppData%\Mozilla\Firefox" )
  17. profilesIniPath  = ( firefoxDirPath & "\" & "Profiles.ini" )
  18. profilePath      = ""
  19. isRelativePath   = False
  20. isDefaultProfile = False
  21.  
  22. Set profilesIni  = fso.OpenTextFile( profilesIniPath )
  23.  
  24. Do Until profilesIni.AtEndOfStream
  25.  
  26.    line = profilesIni.ReadLine()
  27.  
  28.    If ( InStr(1, line, "Path=") = 1 ) then
  29.  
  30.        profilePath = SetProfilePath(Replace( Mid(line, ( Len("Path=") + 1) ), "/", "\" ), isRelativePath)
  31.  
  32.    End if
  33.  
  34.    If ( InStr(1, line, "IsRelative=1") = 1 ) then
  35.  
  36.        isRelativePath = True
  37.  
  38.        If ( profilePath <> "" ) then
  39.            profilePath = SetProfilePath(profilePath, True)
  40.  
  41.            If ( isDefaultProfile ) then
  42.                Exit Do
  43.            End If
  44.  
  45.        End If
  46.  
  47.    End if
  48.  
  49.    If ( InStr(1, line, "Default=1") = 1 ) And ( profilePath <> "" ) Then
  50.        Exit Do
  51.  
  52.    Elseif ( InStr(1, line, "Default=1") = 1 ) Then
  53.        isDefaultProfile = True
  54.  
  55.    End if
  56.  
  57. Loop
  58. profilesIni.Close()
  59.  
  60. Wscript.Echo(profilePath)
  61. Wscript.Quit(0)

Si fuese en otro lenguaje menos limitado (ej. Vb.Net) la tarea de lectura de la estructura ini sería más sencilla y mucho más eficiente, pero no quiero invertir más tiempo desarrollándolo en VBS, creo que con ese script es suficiente al menos para darte la idea inicial a pesar de los posibles fallos en ciertas circunstancias que ya mencioné.

Lo cierto es que otra manera de hacerlo mucho más sencillo sería enumerando las carpetas del directorio de perfiles y con una expresión regular determinar el nombre completo de la carpeta con la expresión "^.+\.default$" (por ejemplo), esto sería mucho más simple, pero a la vez mucho más ineficiente, ya que con un RegEx no podrás determinar cua carpeta hace referencia al perfil por defecto, y aparte, el nombre de la carpeta no tiene por que acabar con ".default", mi carpeta de perfil por ejemplo se llama "Elektro" por que así lo especifiqué manualmente en el archivo ini, y creo que lo que tu buscas es eficiencia por que lo usarás en distintos PC's, así que yo te sugiero evitar la metodología del RegEx/patrones por que como ya he dicho usando el patrón de búsqueda "*.default" no resultará siempre, debes leer los valores del archivo INI para averiguar el nombre real de las carpetas de perfiles.

Sin ir más lejos ni siquiera necesitas expresiones regulares suponiendo que en el 90% (por decir algo) de los casos el usuario seguramente solo tendrá una carpeta en el directorio de perfiles, y esa única carpeta será la carpeta de perfil de Firefox, eso es lo más común, pero no muy eficiente en términos de probabilidad, de todas formas te muestro un ejemplo para iterar las carpetas del directorio de perfiles:

Código
  1. Set fso      = CreateObject( "Scripting.FileSystemObject" )  
  2. Set wshShell = CreateObject( "WScript.Shell" )
  3. Set rootDir  = fso.GetFolder( wshShell.ExpandEnvironmentStrings("%AppData%\Mozilla\Firefox\Profiles") )
  4.  
  5. For Each subDir in rootDir.SubFolders
  6.    Wscript.Echo(subDir.Path)
  7. Next
  8.  
  9. Wscript.Quit(0)

Saludos
« Última modificación: 29 Enero 2016, 02:36 am por Eleкtro » En línea

KZN

Desconectado Desconectado

Mensajes: 98



Ver Perfil
Re: [VBS] Iniciación, dudas rutas.
« Respuesta #7 en: 30 Enero 2016, 19:14 pm »

Me podrías ayudar, intento poner el copyfile pero no me doy cuenta como coger la información del path que has puesto

por cierto no me deja implementar el código GeShi, le doy clic en "Insertar código" y no se me ponen las etiquetas para poder meter cógido dentro
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [VBS] Iniciación, dudas rutas.
« Respuesta #8 en: 31 Enero 2016, 08:14 am »

no me doy cuenta como coger la información del path que has puesto

En el primer script, la ruta la tienes disponible en la variable profilePath al finalizar la ejecución del búcle.
Citar
Código
  1. ...
  2. Wscript.Echo(profilePath)
  3. Wscript.Quit(0)
  4. ...

En el segundo script, la ruta la tienes disponible en la propiedad subDir.Path.
Citar
Código
  1. ...
  2. For Each subDir in rootDir.SubFolders
  3.    Wscript.Echo(subDir.Path)
  4. Next
  5. ...



intento poner el copyfile

Código
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2.  
  3. sourceDir = ".\" ' Aquí asignas el directorio del perfil de firefox que obtienes en el script.
  4. targetDir = "C:\"
  5. fileExt   = ".png"
  6.  
  7. Call CopyFilesRecursive(sourceDir, fileExt)
  8. Wscript.Quit(0)

Métodos:
Código
  1. Sub CopyFilesRecursive(sourceDir, fileExt)
  2.  
  3.    Call CopyFiles(sourceDir, fileExt, targetDir)
  4.  
  5.    For Each subfolder in FSO.GetFolder(sourceDir).SubFolders
  6.        Call CopyFiles(subfolder.Path, fileExt, targetDir)
  7.        Call CopyFilesRecursive(subfolder, fileExt)
  8.    Next
  9.  
  10. End Sub
  11.  
  12. Sub CopyFiles(sourceDir, fileExt, targetDir)
  13.    On Error Resume Next
  14.    Call FSO.CopyFile(sourceDir & "\*" & fileExt, targetDir)
  15. End Sub

Saludos
« Última modificación: 31 Enero 2016, 08:22 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Rutas relativas
.NET (C#, VB.NET, ASP)
juanroma9 1 2,978 Último mensaje 22 Mayo 2008, 19:03 pm
por »~^~«CkNU!»~^~«
Trazar rutas ??
Hacking
xmptl 0 1,867 Último mensaje 22 Enero 2013, 12:06 pm
por xmptl
Rutas Aleatorias
PHP
softer2 1 1,701 Último mensaje 29 Abril 2015, 14:29 pm
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines