Nota:
Si algunas cosas importantes no estan posteadas aqui es por que estan en el tuto de NovLucker asi evito el doble post..
VBScript Avanzado - Temas:
- Intro
- Manejo de Objetos
- Funciones StdOut y StdIn del Objeto Wscript (Salida y Entrada de Datos)
- Creacion y llamada de Funciones (Funcion y Call)
- Funcion Clear Console o CLS by 3D1
- If (Ejemplo con StdIn)
- MsgBox y PopUp ambos tienen sus ventajas y desventajas..
- Uso de Argumentos (Con esto ya puedes decir que tienes un Comando MS-DOS)
- La funcion GetPassword (Crear un campo de contraseña)
- Consultas..
Como nos dice el titulo ejecutar un script vbs pero en la consola de comandos...
Como? facil solo cambianlo el interprete de los VBS en nuestro caso se ejecuta con Windows Based Script Host pero lo cambiamos por Console Based Script Host que es el interprete que usa la ventana del CMD para la salida de datos...
Intro
Este manual esta echo para usuarios que ya sepan y/o ya ayan programado Scripts VBS si es que no tiene idea y quieren aprender desde el principio les recomiendo que lean el tuto de Novlucker esta en el link que pongo a continuacion ahi od enseña como programar en VBScript y ahi esta lo que mayormente vamos ha ocupar.. (Sobre todo el dominar la creacion y utilizacion de los Objetos..)
○ Tutorial de VBScript by Novlucker
Para ejecutar un Script VBS en modo consola es facil solo escribes en el CMD o en tu Batch:
Código
CScript //nologo TuScript.vbs
Manejo de Objetos
Aqui eso va ha depender de ustedes por esa razon dije que deben saber al menos al medio medio la creacion de VBScript por esa razon...
puse el link al manual de Novlucker si es que quieren aprender desde 0 el explica bien la creacion de los Objetos y sobre todo los que vamos a usar..
Funciones StdOut y StdIn del Objeto Wscript (Para Imprimir y Obtener datos de la Consola)
Funcion StdOut (Envio de datos a la Consola)
Para enviar datos a la consola hay dos maneras basicas..
mediante..
Código
Y mediante:
WScript.echo "Mensaje"
Código
Los dos vendrian a ser lo mismo con mucha diferencia que el segundo no hace salto de linea..
WScript.StdOut.Write "Mensaje" & VbNewLine
por esa razon agregamos VbNewLine..
las vantajas de usar StdOut.Write para enviar datos son las siguientes como por ejemplo:
crear este script:
Código
Y lo guardan con nombre de Script.vbs (Para mas comodidad)
for i = 1 to 10 wscript.sleep 100 wscript.StdOut.Write i next
y lo ejecutan con CScript en el CMD (cscript //nologo script.vbs)
Ven la diferencia y las ventajas frente a wscript.echo
Ahora vuelvan ha crear el Script pero incluyendo el salto de linea:
Código
Esto seria igual a Wscript.echo..
for i = 1 to 10 wscript.sleep 100 wscript.StdOut.Write i & VbNewLine next
OK, Asta aqui se entiende creo si hay alguna duda no dudar en preguntar..
Eso fue todo lo referente o StdOut (Enviar Datos)..
Ahora lo emocionante StdIn (Pedir o Recibir datos de la consola)
Funcion StdIn (Pedir y Recibir datos escritos en la consola)
Creo que para muchos que les gusta el Batch tambien les gustara saber que que VBS incluye su propio "Set /p" para pedir datos..
Su funcion es facil (Crear este Script y Ejecutarlo CON CSCRIPT EN EL CMD):
Código
Dats es la variable a la que le asignamos lo que escribimos en la consola y podemos ponerla a un MsgBox si quieren:
Dats = wscript.StdIn.ReadLine
Código
Esto seria igual que poner en Batch "Set /p=", se entiendo ¿no?..
MsgBox wscript.StdIn.ReadLine
Ahora Como mostrar como en Batch seria Set /p var="Escriba Aqui: " en VBScript es facil, recuerdan que StdOut.Write no usa salto de linea es aqui donde nos sirve eso:
(Crear este Scrip.vbs (NO OLVIDAR EJECUTARLO CON CSCRIPT EN CMD))
Código
Ven igual que en Batch solo cambiando unas cosillas lo que escribimos pasa a la variable llamada "var" en este caso..
Wscript.StdOut.Write "Escriba Aqui: " var = Wscript.StdIn.ReadLine
Luego podemos hacer no se, MsgBox var...
Creacion y LLamada de Funciones con CALL
Las llamadas en VBS son similares a las de un batch se hacen con Call solo que sin " : "..
Ok, veamos las funciones..
Que hacen las Funciones?
Pues en resumen corto simplifican el trabajo a un programador por ejemplo para no hacer esto:
Código
Que lo que hace es imprimir 1,2,3,4,5; 4 veces mas facil seria crear una funcion y llamarla como en batch CALL..
For i = 1 to 5 wscript.StdOut.Write i next For i = 1 to 5 wscript.StdOut.Write i next For i = 1 to 5 wscript.StdOut.Write i next For i = 1 to 5 wscript.StdOut.Write i next
Entonces el Code Quedaria asi... Ha y antes, la funcion puede llamarse como quieran aqui le pondre UnoCinco...
Código
Esto hace lo mismo pero usando menos code "call UnoCinco" es mas facil que poner tantos for sobre todo cuando un programa es extenso..
Public function UnoCinco() For i = 1 to 5 wscript.StdOut.Write i next End function call UnoCinco call UnoCinco call UnoCinco call UnoCinco
Como hago una funcion?
Facil las funciones son asi:
Código
"Public function" es para publicar la funcion NOMBRE puede ser cualquiera y "End Function" finaliza la funcion..
Public function NOMBRE() ' Code end function
y el code va dentro de la funcion, ese code se ejecuta solo si llamamos a la funcion como podria decirse si se apreta el boton..
Para llamar a la funcion es como en Batch pero sin " : " solo:
Código
Donde NOMBRE vendria ha ser el nombre de la funcion..
Call NOMBRE
Como hago una funcion? (Incluyendo una variable..)
Es lo mismo pero modificando la parte de " () " por " (Var) " ejemplo en vez de hacer esto:
Código
Que es cansador por ejemplo hacer todos esos mensajes y escribir varias lineas MsgBox, MsgBox, etcetc.., VBInformation, etc...
MsgBox "Pruebas", vbinformation MsgBox "Si", vbinformation MsgBox "no", vbinformation MsgBox "Como", vbinformation Msgbox "BIen", vbinformation
Es molestoso para eso usamos una funcion con una variable asi:
Código
Creo se entiende pero por si las moscas..
Public Function Msgs(MensajeVar) MegBox MensajeVar, vbInformation end function Call Msgs("Pruebas") Call Msgs("Si") Call Msgs("no") Call Msgs("Como") Call Msgs("Bien")
MensajeVar es la Variable que puede contener cualquier nombre que le den igual que la funcion..
Al llamar " Call Msgs ("Pruebas") " lo que hacemos aqui es llamar a la funcion Msgs y pasarle a la variable MensajeVar un Texto que en este caso
le enviamos "Pruebas"..
Al hacer "MsgBox MensajeVar, VbInformation" lo que le estamos diciendo es que muestre el mensaje de la variable MensajeVar osea en
este caso mostrara "Pruebas"...
Bueno es un poco confuso a veces pero si usaron VB ya les hara facil..
Terminamos con function aqui..
Funcion Clear Console o CLS by 3D1
Este code ni existia la funcion CLS no existe en VBS hay que usar un poco de magia batch para poder
hacerlo, este metodo lo he inventado yo rompiendome la cabeza asta lograrlo y lo posteo por primera vez
aqui, si copian el code no olviden al autor..
volviendo..
La funcion Clear Console o CLS tiene este code:
Código
para hacer el CLS de la pantalla del Cmd solo llamarla con Call..
Sub CLS() Set oExec = CreateObject("WScript.Shell").Exec("%comspec% /c mode con lines=0 cols=0 >nul") wscript.sleep 300 End Sub
Código
y borrara la pantalla..
Call Cls
If con StdIn
If creo que saben usarlo en aqui lo vamos a usar con StdIn pidiendo datos..
solo para mostrarles una forma mas rapida de usar if con esto..
ejemplo:
Código
En ahi usamos directamente el pedido de datos en el mismo if haciendo wscript.StdOut.Write
wscript.StdOut.Write "Escriba 1: " if wscript.stdin.ReadLine = "1" then msgbox "Correcto" else msgbox "incorrecto" end if
si escribimos 1 devuelve el mensaje Correcto y si no devuelve Incorrecto..
MsgBox y PopUp ambos tienen sus ventajas y desventajas..
Aqui todos saben usar MsgBox, y es muy util por que tiene la propiedead de poder personalizarle
que botones, imagen, se van ha usar pero en PopUp no pero PopUp tiene una habilidad que
MsgBox no tiene PopUp puede quedarse activo durante 1 segundo y luego cerrarse..
asi con PopUp podemos jugar con los cuadros de mensaje..
es code seria asi:
En primer lugar devemos crear el Objeto Wscript.Shell
Código
esto habre un MsgBox pero se cierra en 1 segundo, esa es la ventaja de PopUp..
set msg=CreateObject("wscript.shell") msg.popup "Hola", 1
por que puedes jugar con los cuadros de mensaje..
Uso de Argumentos
Veran que en Batch para recibir datos de una aplicacion externa se usaban %1, %2, %1..
pues el VBS es parecido, podemos enviarle datos al Script por ejemplo si quiero que mi Script
imprima un mensaje con Cmd lo llamaria asi:
Código
aqui mandamos los argumentos "Hola" a el Script..
CScript //nologo MiScript.vbs "Hola"
luego el Script para interpretarlo tiene que hacer esto..
Código
Esto recuperaria el argumento 0 que tiene el valor "Hola" y asi es posible usar mas de 1 argumento..
MsgBox Wscript.Arguments(0)
y mandar mas de dos datos..
La funcion GetPassword (Crearnos un campo de contraseña)
El Objeto ScriptPW.Password nos permite usar la funcion GetPassword para crear un campo de contraseña..
la contraseña que escribimos por supuesto que no se ve ya que el Cmd no usa asteriscos..
para sus password.., aqui les dejo un ejemplo y luego lo explico:
Código
Aqui asignamos el objeto ScriptPW a la variable var, luego con la unica funcion que tiene este objeto..
Set var = CreateObject("ScriptPW.Password") WScript.StdOut.Write "Contraseña:" pass = var.GetPassword()
usamos "pass = var.GetPassword()" para llamar ha esta funcion y luego asigna lo escrito osea la password..
en la variable pass..
Consultas
Si tienen cualquier duda posteenla y les respondo, y hay varias cosas que ire aumentando conforme pase el tiempo y
se me ocurran mas cosas..
Espero les haya sido util, y quisiera ver el primer comando que creen con VBS para Cmd..
que lo posteen a ver que tal les fue..
SaluDOS!!!