Franz aRTiglio
2008-09-09 02:26:54 UTC
Come anticipato inizio a postare un piccolo "corso" di windows scripting
host.
Piccola premessa: il corso e' a carattere temporalesco (in pratica quando ho
tempo e testa per scrivere.... senza cadenze prefissate), dato che lo
"scopo"
del corso e' dare a chi e' avvezzo ai batch un nuovo strumento, daro' ampio
risalto alla corrispettivita' di comandi e tecniche tra i due mondi.
I post saranno sempre intitolati con questa struttura:
(WSH) Lezione X : argomento : argomento : ecc ecc ecc
Domande di approfondimento sono SEMPRE le benvenute, ovviamente
pero' cercate di fare domande complete, meglio se accompagnate dal
codice del quale chiedete chiarimenti.
______________________________________________________________
Quello che originariamente si chiamava "Windows Scripting Host", per poi
divenire
"Windows Script Host" o piu' semplicemente "Windows Script", e' un
linguaggio
con moltissime attinenze al visual basic calssico (fino alla versione 6), al
punto
che ne ricalca struttura e sintassi nonche' buona parte dei comandi.
Da qui in poi "Visual Basic" verra' abbreviato in VB e "Windows Script"
verra'
abbreviato in WS, spesso pero' WS viene abbreviato in VBs (Visual Basic
script);
tenetene conto quando googlate.
(=BATCH )
Usero' questo tag per mostrare analogie dirette con il buon
vecchio batch, per esempio quando descrivero' il msgbox
troverete (=BATCH echo)
Le piu' significative differenze tra VB e WS sono:
WS non ha bisogno di compilatore/interprete, si scrive
con un semplice editor di testo come il Blocco Note.
WS e' totalmente incapace di "costruire" un'interfaccia
grafica: niente bottoni o form: le sue 2 uniche finestre
sul mondo sono il msgbox e inputbox (che vedremo
piu' avanti), ovviamente e' in gradi di ricevere comandi
da riga (=BATCH %1 %2 %3....).
Il WS e' un linguaggio "ad oggetti", la sua struttura prevede
il _punto_ come separatore tra l'oggetto e il suo metodo, qualora
il metodo preveda parametri, essi verranno forniti tra
parentesi tonde.
Per "metodo" si intende come si usera' l'oggetto, ad esempio
se l'oggetto e' la penna, i suoi metodi sono
aperta (si/no)
scrivi (testo da scrivere)
Quindi, per "scappucciare" la penna e scrivere "ciao", per poi
richiuderla scriveremmo:
penna.aperta(si)
penna.scrivi("ciao")
penna.aperta(no)
Come balza all'occhio, il "ciao" e' virgolettato, questa distinzione
e' indispensabile per comunicare al WS che "ciao" e' una stringa
e non una variabile, a differenza delle variabili BATCH che
vengono identificate dal simbolo percentuale %, le variabili
in WS sono definibili con nomi arbitrari come
pippo
pluto
LaMiaVariabile
In VB esistono diversi tipi di variabili, in WS invece tutte le variabili
sono di tipo variant, cio' significa che sono in grado di contenere
qualsiasi tipo di dato, anche se non e' necessario dimensionarle
(=BATCH set nomevariabile) e' buona norma dimensionarle
all'inizio dello script.
L'argomento variabili appare piuttosto spinoso, in realta' e' molto
semplice se si tengono in considerazione le seguenti affermazioni:
Le variabili in WS non hanno tipo: sono tutte variant.
Il nome delle variabili non e' sensibile al maiuscolo/minuscolo
(ciao, CIAO, cIaO, CIao ... sono la stessa IDENTICA cosa)
Poco piu' sopra ho menzionato la parola "stringhe": per
stringhe si intende tutto quello che e' rappresentato cosi' come
appare, per capirci:
Dim Messaggio
Messaggio = "Ciao"
msgbox Messaggio
wscript.quit
Copiate ed incollate le 4 righe qui sopra nel blocco note, poi
SALVA CON NOME ----> (TUTTI I FILE) ----> ciao.vbs
fate doppio click sul file appena creato, comparira' il nostro
primo "hello world" :)
Ora, per capire il concetto di stringa, faremo una modifica allo
script appena visto, sostituendo la seconda riga:
Dim Messaggio
Messaggio = "5+4"
msgbox Messaggio
wscript.quit
(salvate come fatto prima e doppiocliccate)
Al posto del ciao, e' comparso un 5+4, ora provate a
togliere le virgolette dalla seconda riga:
Dim Messaggio
Messaggio = 5+4
msgbox Messaggio
wscript.quit
(salvate doppiocliccate ecc.)
Cosa e' accaduto ? Quale e' la differenza ?
Semplice: come ho detto prima le virgolette delimitano
le stringhe, usandole comunichiamo a WS che desideriamo
che il testo venga trattato come testo e non come numero.
Attenzione !
Stringhe e numeri NON vanno d'accordo, non si puo' assegnare
contemporaneamente ad una variabile stringhe e numeri, a meno
che questi ultimi non vengano convertiti in stringa.
Un errore comune del neofita e' considerare
"4"
come un numero, ma in realta', essendo esso virgolettato, e'
UNA STRINGA CHE RAPPRESENTA IL NUMERO 4: una stringa
alla pari di "a" "Pippo" e "CIAO CIAO CIAO".
I numeri sopportano operazioni matematiche, le stringhe NO.
Le stringhe sopportano il concatenamento, avendo piu' variabili
che contengano stringhe e' possibile "incollarle" tra loro utilizzando
il simbolo &, e' possibile utilizzare anche il segno + per la
medesima operazione:
Dim Parte1
Dim Parte2
Dim Messaggio
Parte1 = "ciao"
Parte2 = " a tutti"
Messaggio = Parte1 & Parte2
msgbox Messaggio
wscript.quit
Dim Parte1
Dim Parte2
Dim Messaggio
Parte1 = "ciao"
Parte2 = " a tutti"
Messaggio = Parte1 + Parte2
msgbox Messaggio
wscript.quit
Il risultato dei 2 script qui sopra e' identici, ma e' SCONSIGLIATO
usare il segno + per concatenare le stringhe: in uno script lungo
potreste trovarvi a cercare di capire dove si genera un'errore, nel
secondo caso potreste dover frullare il codice alla ricerca delle righe
che assegnano Parte1 e Parte2 per capire se sono stringhe o
numeri; usando il simbolo & capireste al volo che le due variabili
devono contenere delle stringhe.
E' tuttavia possibile convertire stringhe in numero e viceversa, ma
affronteremo l'argomento piu' avanti.
Esercizio:
Dim Messaggio
Messaggio = "blabla"
msgbox Messaggio
wscript.quit
Sostituite "blabla" con i seguenti dati
"Ciao" & " belli"
Ciao & belli
"5" & "4"
"5" + "4"
5 + 4
Ed osservatene il risultato, provate poi con
"dato" + 4
5 + "dato"
Queste ultime 2 righe provocheranno 2 messaggi di errore, cercate
di modificare lo script per "riaparare" l'errore e ottenere 9 come
risultato delle 2 operazioni utilizzando "dato" come variabile.
NON postate gli script corretti per dare a tutti la possibilita' di capirlo
da soli: commenti, critiche e insulti sono ben accetti.
Nella prox lezione affronteremo msgbox, inputbox, conversione
stringa/numeri, manipolazione stringhe e rudimenti di funzioni.
host.
Piccola premessa: il corso e' a carattere temporalesco (in pratica quando ho
tempo e testa per scrivere.... senza cadenze prefissate), dato che lo
"scopo"
del corso e' dare a chi e' avvezzo ai batch un nuovo strumento, daro' ampio
risalto alla corrispettivita' di comandi e tecniche tra i due mondi.
I post saranno sempre intitolati con questa struttura:
(WSH) Lezione X : argomento : argomento : ecc ecc ecc
Domande di approfondimento sono SEMPRE le benvenute, ovviamente
pero' cercate di fare domande complete, meglio se accompagnate dal
codice del quale chiedete chiarimenti.
______________________________________________________________
Quello che originariamente si chiamava "Windows Scripting Host", per poi
divenire
"Windows Script Host" o piu' semplicemente "Windows Script", e' un
linguaggio
con moltissime attinenze al visual basic calssico (fino alla versione 6), al
punto
che ne ricalca struttura e sintassi nonche' buona parte dei comandi.
Da qui in poi "Visual Basic" verra' abbreviato in VB e "Windows Script"
verra'
abbreviato in WS, spesso pero' WS viene abbreviato in VBs (Visual Basic
script);
tenetene conto quando googlate.
(=BATCH )
Usero' questo tag per mostrare analogie dirette con il buon
vecchio batch, per esempio quando descrivero' il msgbox
troverete (=BATCH echo)
Le piu' significative differenze tra VB e WS sono:
WS non ha bisogno di compilatore/interprete, si scrive
con un semplice editor di testo come il Blocco Note.
WS e' totalmente incapace di "costruire" un'interfaccia
grafica: niente bottoni o form: le sue 2 uniche finestre
sul mondo sono il msgbox e inputbox (che vedremo
piu' avanti), ovviamente e' in gradi di ricevere comandi
da riga (=BATCH %1 %2 %3....).
Il WS e' un linguaggio "ad oggetti", la sua struttura prevede
il _punto_ come separatore tra l'oggetto e il suo metodo, qualora
il metodo preveda parametri, essi verranno forniti tra
parentesi tonde.
Per "metodo" si intende come si usera' l'oggetto, ad esempio
se l'oggetto e' la penna, i suoi metodi sono
aperta (si/no)
scrivi (testo da scrivere)
Quindi, per "scappucciare" la penna e scrivere "ciao", per poi
richiuderla scriveremmo:
penna.aperta(si)
penna.scrivi("ciao")
penna.aperta(no)
Come balza all'occhio, il "ciao" e' virgolettato, questa distinzione
e' indispensabile per comunicare al WS che "ciao" e' una stringa
e non una variabile, a differenza delle variabili BATCH che
vengono identificate dal simbolo percentuale %, le variabili
in WS sono definibili con nomi arbitrari come
pippo
pluto
LaMiaVariabile
In VB esistono diversi tipi di variabili, in WS invece tutte le variabili
sono di tipo variant, cio' significa che sono in grado di contenere
qualsiasi tipo di dato, anche se non e' necessario dimensionarle
(=BATCH set nomevariabile) e' buona norma dimensionarle
all'inizio dello script.
L'argomento variabili appare piuttosto spinoso, in realta' e' molto
semplice se si tengono in considerazione le seguenti affermazioni:
Le variabili in WS non hanno tipo: sono tutte variant.
Il nome delle variabili non e' sensibile al maiuscolo/minuscolo
(ciao, CIAO, cIaO, CIao ... sono la stessa IDENTICA cosa)
Poco piu' sopra ho menzionato la parola "stringhe": per
stringhe si intende tutto quello che e' rappresentato cosi' come
appare, per capirci:
Dim Messaggio
Messaggio = "Ciao"
msgbox Messaggio
wscript.quit
Copiate ed incollate le 4 righe qui sopra nel blocco note, poi
SALVA CON NOME ----> (TUTTI I FILE) ----> ciao.vbs
fate doppio click sul file appena creato, comparira' il nostro
primo "hello world" :)
Ora, per capire il concetto di stringa, faremo una modifica allo
script appena visto, sostituendo la seconda riga:
Dim Messaggio
Messaggio = "5+4"
msgbox Messaggio
wscript.quit
(salvate come fatto prima e doppiocliccate)
Al posto del ciao, e' comparso un 5+4, ora provate a
togliere le virgolette dalla seconda riga:
Dim Messaggio
Messaggio = 5+4
msgbox Messaggio
wscript.quit
(salvate doppiocliccate ecc.)
Cosa e' accaduto ? Quale e' la differenza ?
Semplice: come ho detto prima le virgolette delimitano
le stringhe, usandole comunichiamo a WS che desideriamo
che il testo venga trattato come testo e non come numero.
Attenzione !
Stringhe e numeri NON vanno d'accordo, non si puo' assegnare
contemporaneamente ad una variabile stringhe e numeri, a meno
che questi ultimi non vengano convertiti in stringa.
Un errore comune del neofita e' considerare
"4"
come un numero, ma in realta', essendo esso virgolettato, e'
UNA STRINGA CHE RAPPRESENTA IL NUMERO 4: una stringa
alla pari di "a" "Pippo" e "CIAO CIAO CIAO".
I numeri sopportano operazioni matematiche, le stringhe NO.
Le stringhe sopportano il concatenamento, avendo piu' variabili
che contengano stringhe e' possibile "incollarle" tra loro utilizzando
il simbolo &, e' possibile utilizzare anche il segno + per la
medesima operazione:
Dim Parte1
Dim Parte2
Dim Messaggio
Parte1 = "ciao"
Parte2 = " a tutti"
Messaggio = Parte1 & Parte2
msgbox Messaggio
wscript.quit
Dim Parte1
Dim Parte2
Dim Messaggio
Parte1 = "ciao"
Parte2 = " a tutti"
Messaggio = Parte1 + Parte2
msgbox Messaggio
wscript.quit
Il risultato dei 2 script qui sopra e' identici, ma e' SCONSIGLIATO
usare il segno + per concatenare le stringhe: in uno script lungo
potreste trovarvi a cercare di capire dove si genera un'errore, nel
secondo caso potreste dover frullare il codice alla ricerca delle righe
che assegnano Parte1 e Parte2 per capire se sono stringhe o
numeri; usando il simbolo & capireste al volo che le due variabili
devono contenere delle stringhe.
E' tuttavia possibile convertire stringhe in numero e viceversa, ma
affronteremo l'argomento piu' avanti.
Esercizio:
Dim Messaggio
Messaggio = "blabla"
msgbox Messaggio
wscript.quit
Sostituite "blabla" con i seguenti dati
"Ciao" & " belli"
Ciao & belli
"5" & "4"
"5" + "4"
5 + 4
Ed osservatene il risultato, provate poi con
"dato" + 4
5 + "dato"
Queste ultime 2 righe provocheranno 2 messaggi di errore, cercate
di modificare lo script per "riaparare" l'errore e ottenere 9 come
risultato delle 2 operazioni utilizzando "dato" come variabile.
NON postate gli script corretti per dare a tutti la possibilita' di capirlo
da soli: commenti, critiche e insulti sono ben accetti.
Nella prox lezione affronteremo msgbox, inputbox, conversione
stringa/numeri, manipolazione stringhe e rudimenti di funzioni.