Windows Script
També conegut com a WSH (Windows Script Host) és una forma de realitzar scripts en Windows utilitzant algun dels llenguatges compatibles amb Microsoft, típicament (però no només) Visual Basic. Aquest article el farem en Visual Basic que resulta molt útil per la seva senzillesa.
Contingut
Intro
No cal tenir instal·lat res en particular. Windows és capaç d'executar els arxius amb extensió .vbs . Recordeu, això sí, de treure el setting de l'explorador de Windows de "Amagar extensions pels tipus d'arxiu coneguts", i així poder renombrar els nostres arxius amb l'extensió VBS.
Es recomana, això sí, algun editor de text amb syntax highlighting com el típic Notepad++. Com a alternativa a Visual Studio (és molt pesat i de pagament) hi ha una versió més "lite": Visual Studio Code, fins i tot està per a Linux!
Referències:
Primeres passes
Edita un arxiu prova1.vbs amb el teu editor favorit i posa-hi:
'això és un comentari
rem Això és un altre comentari
Wscript.echo "holaaaaa"
Ara, per executar-ho per línia de comandes només caldrà que fem:
> cscript prova1.vbs
Si el volem executar en mode visual, podem fer-hi un doble-click o bé executar
> wscript prova1.vbs
Entrada i sortida
Els típics mètodes d'entrada i sortida son:
- Wscript.echo : per mostrar missatges. Utilitza una finestra o la consola depenent si hem executat wscript o cscript (text i variables es concatenen amb "&" o amb comes):
Wscript.echo "el resultat és ", var1
- Wscript.StdIn.ReadLine : per llegir dades de la consola.
var2 = Wscript.StdIn.ReadLine
- InputBox( prompt, [títol], [defecte], [x], [y] ) : finestra d'entrada de dades.
var3 = InputBox("entra el màxim","entrada de dades")
- MsgBox text, botons, títol : finestra de sortida de dades.
- Botons:
- 0 OK
- 1 OK , Cancel
- 2 Abort , Retry , Ignore
- 3 Yes , No , Cancel
- 4 Yes , No
- 5 Retry , Cancel
- Resultat del quadre:
- OK
- Cancel
- Abort
- Retry
- Ignore
- Yes
- No
- Botons:
Condicionals
If
If <condicio1> Then
...
seqüència 1
...
Elseif <condicio2> Then
...
seqüècia 2
...
Else
...
seqüència 3
...
End if
|
Exemple: If opcions = "verbose" Then
Wscript.Echo "Processat l'arxiu " & arxiuActual
End If
Per operacions lògiques disposem de NOT, AND i OR: finished = False
...
If opcions="verbose" AND NOT finished Then
Wscript.Echo "Processat l'arxiu " & arxiuActual
End If
|
Case
Ve a ser el switch de C:
Select Case <variable>
Case <valor1>
...
seqüència 1
...
Case <valor2>
...
seqüècia 2
...
Case <valor3>
...
seqüència 3
...
End Select
|
Exemple: Select Case opcio2
Case "start"
startEngine()
Case "stop"
stopEngine()
End Select
|
Bucles
Els bucles o loops tenen la següent sintaxi.
For
El bucle bàsic basat en índex és aquest: (aprofitem per veure com definir un Array) Dim numbers = New Integer() {1, 2, 4, 8}
For i=1 To 4
Wscript.Echo numbers(i)
Next
|
Però hauríem de pensar en utilitzar el més convenient bucle per a array/col·leccions, a.k.a. FOR EACH:
Dim numbers = New Integer() {1, 2, 4, 8}
For Each num in numbers
Wscript.Echo num
Next
|
While
Hi ha 3 formes de fer el While
Condició d'entrada WHILE: Do While Not final
...
final = True
...
Loop
|
Condició de sortida WHILE: Do
...
final = True
...
Loop While Not final
|
Condició d'entrada UNTIL: Do Until final
...
final = True
...
Loop
|
Condició de sortida UNTIL: Do
...
final = True
...
Loop Until final
|
També ens queda el While històric de Basic (enlloc de tancar amb LOOP tanquem amb WEND):
While a<10
...
a = a + 1
...
Wend
Funcions i procediments
La diferència entre l'una i l'altre és que les funcions retornen un valor, mentre que els procediments no.
Procediment: Sub esborra_arxius( arxius )
...
End Sub
Els procediment es criden SENSE PARÈNTESIS (encara que calgui passar paràmetres), per exemple: esborra_arxius arxiu1 |
Funció: Function busca_arxius( tipus, carpeta_origen )
...
' al final d'una funció és obligatori retornar algun valor
' enlloc del típic return farem servir el mateix nom de la funció
busca_arxius = arrayArxius
End Function
Les funcions cal cridar-les AMB PARÈNTESIS: busca_arxius( ".txt", "c:\Users" ) |
Objectes
Llegiu POO Introducció.
En el cas de Windows Script disposarem de l'objecte Wscript que ens permetrà l'accés a les llibreries del sistema que ens interessen.
A la Referència MSDN podeu trobar els diversos objectes amb els què treballarem:
- Sistema d'arxius (ref):
- FileSystemObject : el primer objecte a partir del qual podem accedir al sistema d'arxius.
- Folder : objecte que ens permet accedir a la informació del directori i manipular-la.
- File : per manipular arxius (copiar, renombrar, llegir, escriure-hi, etc.)
- Shell:
- Shell Object : atributs i mètodes. Permet executar comandes de la windows shell i operacions relacionades.
- Xarxa:
- Network Object : Permet accedir als paràmetres de xarxa (IP, DNS, màscara, etc.)
Un bon lloc per on començar és amb la llibreria d'accés al sistema d'arxius.
Exercicis
Tots els exercicis han de tenir comentaris i estar correctament tabulats.
- Fes un joc d'endevinar un número entre 1 i 100. A cada intent l'usuari rebrà la informació de si el nombre introduït és major o menor.
- Crea un script que agafi els arxius d'una carpeta que li indiqui l'usuari, crei una altra carpeta amb el mateix nom +"(2)" i copii tots els arxius però amb les lletres en minúscules.
- Crea un script que agafi imatges d'una carpeta i els separi en 2 carpetes: una pels JPG i una altra pels PNG
- L'empresa Bollitos S.A. té una base de dades de clients en arxius de text dispersos tots dins d'una carpeta. Ens demana que li creem un script que passi tots els clients a format CSV separat per punt i coma.
- Ens demanarà el nom de la carpeta on hi ha els arxius de text i el nom de l'arxiu de sortida (.CSV).
- Els arxius tenen les següents dades, una a cada línia:
- Nom de l'empresa
- Nom de la persona de contacte
- NIF
- Adreça postal
- Telèfon
- Fes un script que crei un arxiu .ZIP i hi comprimeixi tots els elements d'una carpeta que li passem per paràmetres al script.
- Fes també un script de UNZIP