Vrste podataka
Jezik VBScript koristi jedan tip podataka - Variant, koji vam omogućuje pohranjivanje broja, niza, datuma, Booleove vrijednosti, reference objekta i drugih informacija u varijablu. Možete odrediti vrstu sadržaja varijable pomoću skupa funkcija: VarType , TypeName, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, o kojima će biti riječi u nastavku. Vrsta sadržane informacije također se naziva podtip varijante. Kompletan popis podtipova dan je u sljedećoj tablici:
Podtip | Opis |
---|---|
Prazan | Varijabli nije dodijeljena vrijednost. Kada koristite neinicijaliziranu varijablu u numeričkim izrazima, 0 će biti zamijenjena, au string izrazima, prazan niz će biti zamijenjen. |
Null | Varijabla ne sadrži podatke. |
Booleov | Booleova varijabla može imati vrijednosti True ili False. |
Bajt | Cijeli broj u rasponu od 0 do 255. |
Cijeli broj | Cijeli broj u rasponu od -32,768 do 32,767. |
Valuta | Broj s fiksnom točkom u rasponu od -922,337,203,685,477.5808 do 922,337,203,685,477.5807. |
dugo | Cijeli broj u rasponu od -2,147,483,648 do 2,147,483,647. |
Singl | Broj s pomičnim zarezom jednostruke preciznosti. Za negativne vrijednosti prihvatljivi raspon je od -3,402823E38 do -1,401298E-45. Za pozitivne - od 1.401298E-45 do 3.402823E38. |
Dvostruko | Broj s pomičnim zarezom dvostruke preciznosti. Za negativne vrijednosti, prihvatljivi raspon je od 79769313486232E308 do -4,94065645841247E-324. Za pozitivne - od 4,94065645841247E-324 do 1,79769313486232E308. |
Datum vrijeme) | Sadrži broj koji predstavlja datum u rasponu od 1. siječnja 100. do 31. prosinca 9999. |
Niz | Redoslijed znakova. Maksimalna duljina je oko 2 milijarde znakova. |
Objekt | Objekt. |
Greška | Broj greške. |
Ovisno o izrazu u koji je uključena varijabla, njen će se sadržaj automatski pretvoriti u željeni tip. Razmotrite ovaj primjer:
Opcija Explicit Sub TestVBScript Dim A, B A = 5 B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub
Budući da izraz uključuje numeričku varijablu A, interpreter pretvara vrijednost varijable B od niza "12" u broj i zbraja ih:
Promijenimo makro tako da varijabla A također je sadržavao redak:
Opcija Explicit Sub TestVBScript Dim A, B A = "5" B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub
Pokrenimo ga. Sada će se na ekranu pojaviti rezultat spajanja (ulančavanja) dva niza, a ne zbroj njihovih numeričkih prikaza:
Kako biste izbjegli zabunu s automatskim pretvaranjem tipa, preporuča se korištenje funkcija pretvorbe: CBool, CByte, CCur, CDate, CDbl, CInt, CLng, CSng, CStr.
Ako bi rezultat izraza trebao biti ulančavanje nizova, a ne zbroj njihovih numeričkih prikaza, tada bi se umjesto + trebao koristiti operator &.
Varijable
Varijabla je zgodan simbolički prikaz područja memorije gdje aplikacija pohranjuje neke podatke. Tijekom izvođenja aplikacije, vrijednost varijable se može promijeniti. Prije upotrebe, varijabla mora biti deklarirana pomoću naredbe Dim.
Koristeći jedan operator, možete deklarirati nekoliko varijabli odjednom, ako navedete njihova imena odvojena zarezima:
Zatamni lijevo, desno, gore, dolje
Prilikom deklaracije nema potrebe za specificiranjem tipa podataka, jer su sve varijable tipa Variant.
Ako Option Explicit nije navedena u prvom retku teksta skripte, tada se varijable mogu koristiti bez deklaracije. Ali ovaj put može dovesti do pogrešaka koje je teško otkriti. Dovoljno je jednom pogrešno napisati naziv varijable u tekstu programa da dobijete nepredvidiv rezultat. Preporučujemo da uvijek navedete Option Explicit i deklarirate varijable.
Naziv varijable mora ispunjavati sljedeće zahtjeve:
- Započnite simbolom latinične abecede;
- Sastoje se samo od znakova latinične abecede ili znakova latinične abecede i brojeva;
- Nemojte premašiti duljinu od 255 znakova;
- Budite jedinstveni unutar svog opsega.
Opseg i vijek trajanja
Opseg varijable određen je mjestom na kojem je deklarirana. Ako je unutar tijela procedure, tada se takva varijabla naziva lokalnom i dostupna je samo unutar ove procedure. Ako je varijabla deklarirana u tekstu skripte, tada će biti vidljiva svim procedurama ili funkcijama definiranim u ovoj skripti. Lokalne varijable mogu imati ista imena ako su deklarirane u različitim procedurama.
U stablu Explorer prozora Script Object Editor postoji poseban odjeljak - Konstante i varijable - za deklariranje globalnih varijabli vidljivih svim funkcijama skripte u projektu.
Interpretator dodjeljuje memoriju za lokalne varijable u vrijeme kada su deklarirane i oslobađa ih nakon izlaska iz procedure. Globalne varijable postoje od trenutka kada su deklarirane sve dok skripta ne završi s izvođenjem. U odnosu na Gedymin, to znači da globalne varijable postoje tijekom cijelog izvođenja programa.
Dodjeljivanje vrijednosti varijabli
Vrijednost deklarirane varijable dodjeljuje se pomoću operatora =. Ime varijable je naznačeno lijevo od operatora, nova vrijednost je naznačena desno. Na primjer:
A = 200 B = "Ime"
Skalarne varijable i nizovi
Varijabla koja sadrži jednu vrijednost naziva se skalar. Ponekad je potrebno pohraniti nekoliko vrijednosti u jednu varijablu. U ovom slučaju, trebali biste deklarirati niz. Sintaksa deklaracije identična je deklaraciji skalarne varijable, s tim da iza imena u zagradama navodimo veličinu niza. Sljedeća deklaracija će stvoriti niz od 12 elemenata:
Dim mjeseci (11)
U VBScriptu, lijeva granica indeksa niza uvijek je 0. Stoga se veličina niza izračunava kao broj u zagradama plus jedan. Kada dodjeljujete vrijednost elementu polja, navedite njegov indeks u zagradama:
Mjeseci(0) = "siječanj" Mjeseci(1) = "veljača" Mjeseci(2) = "ožujak" ... Mjeseci(10) = "studeni" Mjeseci(11) = "prosinac"
Slično, kada pristupamo vrijednosti elementa, koristimo njegov indeks:
Ime mjeseca = mjeseci(5)
Niz ne mora biti jednodimenzionalan. VBScript nam omogućuje navođenje do 60 dimenzija prilikom deklaracije niza. Na primjer, sljedeća izjava će stvoriti dvodimenzionalni niz od 12 redaka i dva stupca:
Dim MonthDays(11, 1)
Prilikom pristupa elementima višedimenzionalnog niza moraju biti navedeni svi indeksi:
MonthDays(0, 0) = "siječanj" MonthDays(0, 1) = 31 MonthDays(1, 0) = "veljača" MonthDays(1, 1) = 28 ...
Gore smo deklarirali nizove čija se veličina ne mijenja tijekom rada programa. Ako ne znate unaprijed koliko će vam elemenata trebati, možete deklarirati dinamički niz:
Prije upotrebe trebate postaviti veličinu dinamičkog niza pomoću operatora ReDim:
ReDim A(25)
Tijekom izvođenja možete pozvati ReDim operator više puta, mijenjajući svaki put veličinu niza. Opcija Sačuvaj čuva vrijednosti elemenata niza prilikom promjene veličine. Na primjer, sljedeći kod će povećati gore deklarirani niz za pet elemenata, ostavljajući postojeće netaknutima:
ReDim Preserve A(30)
Imajte na umu da će se prilikom smanjenja veličine niza vrijednosti izbrisanih elemenata nepovratno izgubiti. Pomoću operatora Erase možete izbrisati elemente fiksnog niza ili osloboditi memoriju koju zauzima dinamički niz.
Dim A Redim A(25) ... Erase A
Konstante
Dobro je praktično pravilo deklarirati konstante za vrijednosti koje se opetovano koriste u tekstu programa. Ispravno dodijeljeno ime konstante poboljšava čitljivost, a sama njegova upotreba pojednostavljuje proces izmjene koda. Za razliku od varijabli, vrijednost konstante ne može se mijenjati tijekom izvođenja programa. Konstanta se stvara pomoću operatora Const:
Const CountryName = "Bjelorusija" Const CountryCode = 375
Unutar jedne naredbe može se deklarirati nekoliko konstanti, odvojenih zarezima. Kao i varijabla, konstanta ima svoj opseg ovisno o tome gdje (u proceduri ili izvan nje) i kako (javno ili privatno) je deklarirana. Konstante koje je stvorio operator Const bez specificiranja Public ili Private prema zadanim su postavkama javne.
U stablu Explorer prozora Script Object Editor postoji poseban odjeljak - Konstante i varijable - za deklariranje globalnih konstanti vidljivih svim funkcijama skripte u projektu.
Vrijednosti konstanti niza nalaze se u dvostrukim navodnicima.
Vrijednosti tipa Datum trebaju biti okružene hash simbolima (#) i koristiti američki format: mjesec/dan/godina. Na primjer:
Const Public IndependenceDay = #03/25/1918#
Kako bi se izbjegla zabuna između konstanti i varijabli, preporuča se koristiti jedan prefiks za sve konstante, kao što je "con", ili upisati naziv konstante velikim slovima.
Kako bi programeru olakšao rad, VBScript sadrži skup unaprijed definiranih konstanti.
Operatori
VBScript operatori spadaju u pet kategorija: aritmetika, usporedba, spajanje, logika i dodjela.
Aritmetički operatori
Operater | Primjer upotrebe | Opis |
---|---|---|
^ | broj^eksponent | Podiže broj na eksponent. Broj može biti manji od nule samo ako je cjelobrojna potencija. Ako je jedan od operanda Null, cijeli izraz je Null. Ako se izvede nekoliko potenciranja u nizu, rezultat se računa slijeva nadesno. |
* | broj1 * broj2 | Umnožak dvaju brojeva. Ako operand ima vrijednost Empty, tada se pretpostavlja da je nula. Ako je barem jedan od operanda Null, cijeli izraz se procjenjuje kao Null. |
/ | broj1 / broj2 | Realno dijeljenje dvaju brojeva. Pravila za operande slična su onima za operator množenja. |
\ | broj1\broj2 | Cjelobrojno dijeljenje. Prije procjene, oba se operanda pretvaraju u Byte, Integer ili Long. Inače vrijede ista pravila kao i za operator dijeljenja. |
Mod | broj1 Mod broj2 | Ostatak cjelobrojnog dijeljenja. Pretvaranje operanda u cijeli broj, kao i pravila za rukovanje Empty i Null, poput cjelobrojnog dijeljenja. |
+ | izraz1 + izraz2 | Ako su oba operanda brojevi, rezultat je njihov aritmetički zbroj. Ako su oba operanda nizovi, radi se o spajanju (ulančavanju) dva niza. Ako je jedan operand broj, a drugi niz, tada će se operand niza pretvoriti u broj i dodati numeričkom. Ako je barem jedan od operanda Null, cijeli izraz se procjenjuje kao Null. Ako su oba operanda prazna, rezultat ima cjelobrojnu vrijednost 0. Ako je samo jedan operator prazan, kao rezultat se vraća vrijednost drugog operanda. |
- | broj1 – broj2 ili - broj | U prvom slučaju vraća razliku dvaju brojeva. U drugom, obrće predznak broja. Pravila za operande s vrijednostima Null i Empty, kao i za operator množenja. |
Operatori usporedbe
Format za korištenje operatora usporedbe:
Rezultat = izraz1 operator usporedbe izraz2
gdje se koriste sljedeći operatori usporedbe:< (меньше), <= (меньше или равно), >(veće od), >= (veće od ili jednako), = (jednako),<>(nejednak).
Ovisno o vrstama i vrijednostima operanda, usporedba se provodi na sljedeći način:
Ako | Da |
---|---|
Oba operanda su brojevi. | Uspoređuje se dva broja. |
Oba operanda su nizovi. | Izvodi se usporedba dva niza. |
Jedan od operanda je broj, a drugi je niz. | Operand niza pretvara se u broj i vrši se usporedba između dva broja. |
Jedan od operanda je prazan, a drugi je broj. | Pretpostavlja se da je operand s vrijednošću Empty 0. |
Jedan od operanda je Empty, a drugi je niz. | Pretpostavlja se da je operand s vrijednošću Empty prazan niz "". Uspoređuje se dva niza. |
Oba operanda su prazna. | Operandi se smatraju jednakima. |
Najmanje jedan od operanda je Null. | Rezultat je Null. |
Poseban operator Is koristi se za usporedbu dviju varijabli objekta i vraća True ako se obje varijable odnose na istu instancu objekta.
Operatori ulančavanja
Rezultat = izraz1 & izraz2
Ako operand nije niz, pretvara se u tip niza. Ako su oba operanda Null, tada rezultat također ima vrijednost Null, međutim, za razliku od drugih operatora, ako je samo jedan operand Null, tada se uzima kao jednak praznom nizu. Operand postavljen na Empty također se tretira kao prazan niz "".
Logički operatori
VBScript nam daje sljedeće logičke operatore:
- Logička iznimka (Xor);
- Logički ekvivalent (Eqv);
- Logička implikacija (Imp).
Operandi logičkih operatora mogu biti Booleovi izrazi ili numeričke vrijednosti. U prvom slučaju, rezultat će biti Booleova konstanta, u drugom - broj. Ovisno o operatoru, unos jedne ili dvije Null vrijednosti kao ulaz može dovesti do Null rezultata. Operator Not je unarni i vraća logičku negaciju izraza. Operator Not izvodi pobitnu inverziju na numeričkom operandu. Ostali logički operatori su binarni. Donja tablica prikazuje rezultate izvršavanja svakog od operatora ovisno o vrijednosti operanda Exp1 i Exp2:
Exp1 | Exp2 | I | Ili | Xor | Ekv | Imp |
---|---|---|---|---|---|---|
Pravi | Pravi | Pravi | Pravi | lažno | Pravi | Pravi |
Pravi | lažno | lažno | Pravi | Pravi | lažno | lažno |
lažno | Pravi | lažno | Pravi | Pravi | lažno | Pravi |
lažno | lažno | lažno | lažno | lažno | Pravi | Pravi |
Pravi | Null | Null | Pravi | Null | Null | Null |
lažno | Null | lažno | Null | Null | Null | Pravi |
Null | Pravi | Null | Pravi | Null | Null | Pravi |
Null | lažno | lažno | Null | Null | Null | Null |
Null | Null | Null | Null | Null | Null | Null |
U životu se najčešće koriste operatori And i Or, a mnogo rjeđe - Xor. U praksi se nismo susreli s korištenjem operatora Eqv i Imp. Ako vam je teško razumjeti gornju tablicu, rezimirajmo djelovanje ovih operatora:
- I daje vrijednost True samo ako su oba operanda True. U svakom drugom slučaju, ili je False ili Null.
- Ili daje vrijednost True ako je barem jedan od operanda True.
- Xor daje vrijednost True ako su vrijednosti operanda različite i False ako su iste.
Kada se izvršava po bitovima na numeričkim operandima, rezultat logičkog operatora određen je sljedećom tablicom:
Exp1 | Exp2 | I | Ili | Xor | Ekv | Imp |
---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 1 | 1 |
Operator dodjele
Operator dodjele (=) detaljno je opisan u odjeljku Varijable.
Redoslijed primjene operatora
Ako izraz sadrži više operatora, oni se primjenjuju u skladu s određenim redoslijedom koji se naziva prvenstvo operatora. Zadani redoslijed možete promijeniti pomoću zagrada. Izraz unutar zagrada uvijek se prvi procjenjuje.
U izrazu koji sadrži operatore različitih kategorija prvo se izvode aritmetičke operacije, zatim operatori usporedbe, a zadnji se izvode logički operatori. Svi operatori usporedbe imaju isti prioritet i procjenjuju se slijeva nadesno. Aritmetički i logički operatori procjenjuju se sljedećim redoslijedom:
- Potenciranje (^);
- Promjena predznaka broja, unarni minus (-);
- Množenje (*) i dijeljenje (/);
- Cjelobrojno dijeljenje (\);
- Ostatak cjelobrojnog dijeljenja (Mod);
- Zbrajanje (+) i oduzimanje (-);
- Spajanje nizova (&).
Ako se množenje i dijeljenje pojavljuju u istom izrazu, tada se operacije izvode slijeva nadesno. Slično pravilo vrijedi u slučaju istodobne prisutnosti operatora zbrajanja i oduzimanja.
Operator spajanja nizova (&) nije aritmetički i ima prednost između aritmetičkih i usporednih operatora.
Redoslijed prioriteta za logičke operatore je sljedeći:
- Logička negacija, inverzija (Ne);
- Logičko množenje, konjunkcija (I);
- Logičko sabiranje, disjunkcija (Ili);
- Logička iznimka (Xor);
- Logički ekvivalent (Eqv);
- Logička implikacija (Imp).
Uvjetni izrazi
Uvjetni izrazi koriste se za kontrolu redoslijeda izvršavanja programskih naredbi i omogućuju organiziranje prijelaza (grananja) i ponavljanja naredbi. Obično se operatori usporedbe koriste u kombinaciji s uvjetnim izrazima.
If..Then..Else izraz
Izraz uvjetnog skoka If omogućuje vam da izvršite određenu grupu naredbi ovisno o rezultatu logičkog izraza ili vrijednosti Booleove varijable.
Za izvršenje jedne naredbe kada je zadani uvjet ispunjen, koristite sintaksu izraza u jednom retku:
Dim S If DatePart("w", Now) = vbMonday Then S = "Monday" Application.MessageBox S, "", vbOkOnly
Imajte na umu da je odjeljak Else u ovom slučaju izostavljen. Da biste izvršili grupu naredbi, morate ih staviti između ključnih riječi Then i End If.
Dim S If DatePart("w", Now) = vbMonday Then S = "Danas je ponedjeljak" Application.MessageBox S, "", vbOkOnly End If
Ako, kada je uvjet ispunjen, treba izvršiti jedan kod, a kada uvjet nije ispunjen, potreban je drugi kod, tada se koristi sintaksa izraza s odjeljkom Else:
Dim S If DatePart("w", Now) = vbMonday Then S = "Danas je ponedjeljak" Else S = "Danas nije ponedjeljak" End If Application.MessageBox S, "", vbOkOnly
Ako trebate birati između nekoliko alternativa, prikladna je sintaksa s ElseIf konstrukcijom:
Dim S, D D = DatePart("w", Now) If D = vbMonday Then S = "Monday" ElseIf D = vbTuesday Then S = "Tuesday" ElseIf D = vbWednesday Then S = "Wednesday" ... End If Application. Okvir za poruke S, "", vbOkOnly
Ako se izjave mogu ugniježditi:
Dim S, D D = DatePart("w", Now) If D = vbMonday Then S = "Monday" Else If D = vbTuesday Then S = "Tuesday" Else If D = vbWednesday Then S = "Wednesday" Else ... End Ako Kraj Ako Kraj Ako
Iako ne postoji ograničenje broja klauzula ElseIf u uvjetnom izrazu, njihova opsežna upotreba može rezultirati zbunjujućim, nečitljivim kodom. U slučaju odabira jedne alternative od više mogućih ovisno o vrijednosti selektora, preporučuje se korištenje izraza Select Case.
Odaberite..Padežni izraz
Prepišimo primjer dana u tjednu koristeći izraz za odabir:
Dim S Select Case DatePart("w", Now) Case vbMonday S = "Monday" Case vbTuesday S = "Tuesday" Case vbWednesday S = "Wednesday" ... Case Else Err.Raise 32000, "", "Unknown day of tjedan " Kraj Odaberite
Budući da se izraz selektora vrednuje samo jednom, korištenje Select..Case rezultira učinkovitijim kodom. Preporuča se uvijek koristiti odjeljak Case Else za hvatanje nevažećih ili neobrađenih vrijednosti selektora.
Izjave petlje
Vrlo često se javlja situacija kada je kod potrebno ponovno pokrenuti. Da biste to učinili, napišite naredbu petlje koja uvijek iznova ponavlja određene naredbe. Izjave petlje koriste se u mnogim situacijama: kada se izračunava zbroj preko popisa brojeva, kreće se kroz zapise skupa podataka ili za izvođenje bloka koda na više objekata. Postoji nekoliko ciklusa, opisanih u sljedećim odjeljcima. Neki od njih se izvršavaju dok je uvjet True, neki se izvršavaju dok je uvjet False. I na kraju, postoje oni koji se izvršavaju određeni broj puta.
Do..Operator petlje
Ovaj je operator dizajniran za izvršavanje grupe naredbi sve dok zadani uvjet ne postane True ili dok ne postane True. Uvjet se može provjeriti kao na početku petlje:
Izvršite [(While | Until) uvjet] petlju
i tako na kraju:
Uradi petlju [(While | Until) uvjet]
Naredba Exit Do može se pojaviti neograničen broj puta u tijelu petlje. Obično se koristi u kombinaciji s If..Then uvjetnom naredbom, omogućuje prijenos kontrole na naredbu odmah nakon petlje. Kada koristite Exit Do unutar ugniježđene petlje, kontrola će prijeći na vanjsku petlju.
Sljedeći kod omogućuje zamjenu kockica:
Dim Resp, Num Do Num = Int(6 * Rnd + 1) Resp = Application.MessageBox(Num & "Još jedan broj?", "",_ vbYesNo ili vbQuestion) Loop Until Resp = vbNo
Dok..Wend
To je skraćena verzija Do..Loop operatora i omogućuje vam izvršavanje grupe naredbi sve dok je uvjet True. Sintaksa operatora:
Dok stanje Wend
Imajte na umu da Exit Do nema učinka unutar ove petlje. While..Wend petlje mogu biti ugniježđene.
Za..Dalje
Ova petlja ponavlja zadani skup naredbi određeni broj puta. Sintaksa operatora je:
Za brojač = početak Za kraj Dalje
Prije početka petlje, varijabli brojača se dodjeljuje početna vrijednost. Zatim se provjerava uvjet brojača.<= end, при step >= 0, ili brojač >= kraj, s negativnim korakom. Nakon izvršenja bloka naredbi, varijabla brojača se povećava za vrijednost koraka i sve se ponavlja iz početka.
Promjena brojača u tijelu petlje nije zabranjena, ali se strogo obeshrabruje jer otežava razumijevanje programske logike i otklanjanje pogrešaka.
Exit For se može pojaviti u tijelu petlje neograničeni broj puta. Petlje se mogu ugniježditi. Na primjer, ova petlja inicijalizira trodimenzionalni niz:
Dim A(9, 9, 9) Dim I, J, K Za I = 0 do 9 Za J = 0 do 9 Za K = 0 do 9 A(I, J, K) = 1 Dalje Dalje Dalje
Za svaki..Dalje
Izjava petlje For Each..Next ponavlja određeni skup naredbi za svaki element niza ili zbirke i ima sljedeću sintaksu:
Za svaki element u grupi Next
Petlja se izvršava ako postoji barem jedan element u nizu ili kolekciji. Izlaz za može se pojaviti u tijelu petlje proizvoljan broj puta.
Ilustrirajmo korištenje For Each..Next sa sljedećim kodom, koji prikazuje popis datoteka iz korijenskog direktorija pogona c:\
Dim fso, f, f1, fc, s Postavi fso = CreateObject("Scripting.FileSystemObject") Postavi f = fso.GetFolder("c:\") Postavi fc = f.Files za svaki f1 u fc s = s & f1 .name & vbNewLine Next Application.MessageBox s, "Datoteke na c:\", vbOkOnly
Postupci
Da biste uštedjeli memoriju i strukturirali program, dio koda koji se više puta poziva na različitim mjestima može se oblikovati kao procedura. Postoje dvije vrste procedura u VBScriptu: potprogrami (Sub) i funkcije (Function). Potprogram je niz naredbi okruženih ključnim riječima Sub i End Sub. Potprogram može prihvatiti parametre kao ulaz, ali ne vraća vrijednosti. Funkcija, slijed naredbi između funkcije i završne funkcije, vraća rezultat i stoga se može koristiti u izrazu. Svaka procedura mora imati naziv koji je jedinstven unutar modula. Nazivi procedura deklariranih u globalnom modulu moraju biti jedinstveni unutar cijelog projekta.
Definicija podrutine i funkcije ima sljedeću sintaksu:
| Private] Sub name [(arglist)] End Sub | Private] Naziv funkcije [(arglist)] Kraj funkcije
Javne procedure su globalne i dostupne u svim programskim skriptama. Privatne procedure dostupne su samo u skripti u kojoj su deklarirane. Ako nije drugačije određeno, prijavljeni postupak je javan. Ključna riječ Default može se koristiti samo u tijelu klase i služi za određivanje zadane metode ove klase.
Popis parametara ima sljedeću sintaksu:
Varname [, ...]
Parametri se mogu proslijediti po vrijednosti (ByVal) ili po referenci (ByRef). Prema zadanim postavkama, svi parametri se prosljeđuju prema vrijednosti. Konstante, rezultati izračunavanja izraza, mogu se proslijediti samo prema vrijednosti. Promjena parametra proslijeđenog referencom promijenit će vrijednost vanjske varijable. Objasnimo prosljeđivanje parametara unutar procedure koristeći sljedeći primjer:
Sub DoCalculation(ByRef A, ByVal B, ByVal C) A = C * 2 B = C / 2 End Sub Sub TestVar Dim V1, V2 V1 = 1 V2 = 2 DoCalculation V1, V2, 10 " Nakon izvođenja postupka DoCalculation " V1 = 20" V2 = 2 krajnja pod
Varijable deklarirane unutar tijela procedure su lokalne i uništavaju se nakon završetka njezina izvođenja. Vrijednosti lokalnih varijabli se ne spremaju.
Popis parametara naveden je u zagradama kada se poziva funkcija ili kada se poziva potprogram pomoću naredbe Call. Dakle, mogli bismo napisati poziv DoCalculation procedure u gornjem primjeru na sljedeći način:
Poziv DoCalculation(V1, V2, 10)
Izvrši izraz
VBScript klase
VBScript vam omogućuje stvaranje novih klasa, koje ćemo ubuduće zvati VB klase. Općenito govoreći, oni nisu punopravne klase u smislu objektno orijentiranog programiranja, jer ne podržavaju nasljeđivanje i, sukladno tome, polimorfizam. Dakle, od tri stupa na kojima se temelji objektno orijentirana paradigma ostaje samo enkapsulacija – mogućnost kombiniranja podataka i metoda unutar jednog entiteta.
Klasa je definirana pomoću sljedeće konstrukcije:
Izjave o nazivu klase End Class
gdje je ime naziv klase, a izjave su jedna ili više definicija varijabli, svojstava, procedura ili funkcija, koje se također nazivaju članovima klase. Imajte na umu da za razliku od Delphija, gdje kod definicije klase sadrži samo deklaracije procedura i funkcija, u VB klasi kod člana je napisan izravno u tekstu klase.
Članovi klase mogu se proglasiti privatnim ili javnim. Prvi su vidljivi samo unutar koda dane klase, dok su drugi dostupni i internom kodu i eksterno. Ako varijabla ili funkcija (procedura) ne sadrži eksplicitnu definiciju javnog ili privatnog, tada se smatra javnom. Procedure ili funkcije deklarirane kao javne unutar bloka klase postaju metode te klase.
Varijable deklarirane kao javne postaju svojstva klase zajedno sa svojstvima deklariranim izravno pomoću konstrukcija Property Get, Property Let, Property Set.
Definiranje svojstava klase
Već smo gore rekli da polja klase, eksplicitno ili implicitno deklarirana kao javna, postaju njezina svojstva. Osim toga, možete kreirati svojstvo klase definiranjem posebnih funkcija za čitanje vrijednosti svojstva (Property Get), kao i za njegovo dodjeljivanje (Property Let ili Property Set).
Sintaksa za definiranje takvih funkcija je sljedeća:
| Private] Property Get name [(arglist)] [ name = izraz] [ name = izraz] End Property Property Let name ( value) End Property Property Set name( reference) End Property
Definiranjem samo jedne funkcije, read ili assign, možete stvoriti svojstvo koje je samo za čitanje ili samo za pisanje. Procedura Property Let koristi se za dodjelu jednostavnih tipova podataka, a procedura Property Set koristi se za prosljeđivanje reference na objekt. Imajte na umu da sve tri funkcije mogu uzeti proizvoljan popis parametara kao ulaz. Na ovaj način možete organizirati, na primjer, svojstva polja prosljeđivanjem indeksa elementa kao argumenta.
Stvaranje i uništavanje instance VB klase
Kreiranje instance VB klase vrši se pomoću operatora New.
Dim X Postavi X = Novo ime klase
Uništavanje prethodno stvorene instance događa se automatski nakon završetka bloka koda gdje je odgovarajuća varijabla deklarirana i pod uvjetom da nema vanjskih referenci na nju. Ako morate ručno uništiti instancu, varijabli morate dodijeliti vrijednost Ništa.
‘ deklariranje varijable i stvaranje instance klase Dim X Set X = New classname ... ‘ korištenje instance klase... ‘ uništavanje instance klase Set X = Notning ...
Inicijaliziranje i prekidanje događaja
Događaj Initialize događa se kada se kreira instanca klase, a događaj Terminate događa se kada se ona uništi. Programer može definirati vlastite rukovatelje podacima događaja. Dolje je primjer korištenja događaja stvaranja i brisanja objekta:
Klasa TestClass " Definicija rukovatelja događajima Initialize. Private Sub Class_Initialize MsgBox("TestClass started") End Sub " Definicija rukovatelja događajima Terminate. Private Sub Class_Terminate MsgBox("TestClass prekinut") End Sub End Class " Stvaranje instance klase TestClass. " Prikazat će se poruka "TestClass started" Set X = New TestClass " Uništavanje instance. " Poruka "TestClass prekinuta" Set će biti prikazan X = ništa
Nastavak
Visual Basic skripta
Zašto su nam potrebne VBS skripte?
VBS skripta moćno je rješenje za automatizaciju radnji korisnika na Windows sustavima. Ova vrsta skripte obično se koristi za:
- stvaranje složenih scenarija;
- korištenje objekata iz drugih aplikacija i biblioteka;
- skrivanje prozora tijekom izvršavanja skripte;
- šifriranje logike skripte.
VBS skripte uglavnom se koriste za obradu podataka, upravljanje sustavom, rad s korisničkim i računalnim računima, interakciju s uredskim aplikacijama, rad s bazama podataka i druge složene zadatke.
Osnovne odredbe
Ovisno o jeziku skripte, sadržaju i enkripciji, nalaze se sljedeće vrste skripti:
- vbs - Visual Basic skripta
- vbe - šifrirana Visual Basic skripta
- js - Java skripta
- jse - šifrirana Java skripta
- wsh - postavke skripte
- wsf - XML objedinjena skripta
U ovom ću članku pogledati skripte tipa vbs.
Skripte se obično uređuju u Windows Notepadu, ali preporučujem korištenje Notepada2, koji ističe ključne riječi jezika Visual Basic i pomaže u formatiranju tijela skripte. Dakle, vbs skripta je obična tekstualna datoteka pod nazivom *.VBS, koja se može lako uređivati u Notepadu i izvoditi dvostrukim klikom ili pozivanjem naziva u konzoli.
Kao što je gore opisano, skripte se ne kompiliraju, već se interpretiraju. Odnosno, za obradu skripte sustav mora imati VBS jezični interpreter, a u Windowsima postoje čak dva takva interpretera: prozorski WScript i konzolni CScript - oba tumača su Windows Script Host (WSH).
Prema zadanim postavkama, sve skripte se izvršavaju kroz WScript, odnosno nisu potrebne nikakve postavke, ali da biste izvršili skriptu u prozoru konzole, morate je pokrenuti kroz CScript ili postaviti CScript kao zadani tumač. Da biste to učinili, morate pokrenuti sljedeće u naredbenom retku:
CScript //H:CScript
Nakon čega će se sve skripte izvršiti u konzolnom načinu rada. Povratak u prozorski način rada provodi se sljedećom naredbom:
CScript //H:WScript
Sljedeća pravila rade u Visual Basicu:
- duljina linije nije ograničena;
- Velika i mala slova nisu osjetljiva;
- broj razmaka između parametara se ne uzima u obzir;
- naredbeni redak se može prekinuti, a na mjestu prekida potrebno je umetnuti simbol "_";
- maksimalna duljina naziva varijable je 255 znakova;
- komentari su označeni simbolom " ".
" === Zaglavlje informacija o skripti === " Naziv skripte: " naziv skripte; " Datum: " datum izmjene; " Autor: " autor; " Opis: " opis; " === Blok inicijalizacije === Eksplicitna opcija " direktiva , koja zabranjuje automatsko stvaranje " varijabli; Dim
Varijable
Prema zadanim postavkama, varijable u skriptama deklariraju se automatski prvi put kada se koriste u tijelu skripte, osim ako to nije zabranjeno direktivom Option Explicit. Ako deklarirate Option Explicit direktivu na početku skripte, tada sve varijable moraju biti definirane unaprijed koristeći sljedeće konstrukcije:
Dim
Konstante su deklarirane na početku skripte pomoću sljedeće konstrukcije:
Konst
Tip varijable se dodjeljuje automatski nakon što se u nju unese prva vrijednost. Sljedeći tipovi podataka postoje u Visual Basicu:
- prazno - neinicijalizirana varijabla;
- null - prazna varijabla;
- boolean - logički tip, moguće vrijednosti: False, True ili 0, 1;
- bajt - 8-bitni cijeli broj bez predznaka, moguće vrijednosti: 0 .. 255;
- cijeli broj - 32-bitni cijeli broj, moguće vrijednosti: -32768 .. 32767;
- long - 64-bitni cijeli broj, moguće vrijednosti: -2147483648 .. 2147483647;
- valuta - novčani tip, moguće vrijednosti: -922337203685477.5808 do 922337203685477.5807;
- pojedinačni broj s pomičnim zarezom, moguće vrijednosti: -3.402823e38 .. -1.401298e-45 za negativne brojeve i 1.401298e-45 .. 3.402823e38 za pozitivne brojeve;
- double - broj s pomičnim zarezom, moguće vrijednosti: 1.79769313486232e308 .. -4.94065645841247e-324 za negativne brojeve i 4.94065645841247e-324 .. 1.79769313486232e308 za pozitivne brojeve;
- datum - datum, moguće vrijednosti: 01/01/1900 i 01/31/9999;
- string - string varijabla, kapaciteta do 2 milijarde znakova;
- objekt - pokazivač na objekt;
- greška - kod greške.
Podaci se mogu provjeriti radi usklađenosti tipa, kao i pretvoriti iz jednog tipa u drugi, ako vrijednosti to dopuštaju. Za operacije na tipovima podataka koriste se sljedeće naredbe:
VarType(
Kao što je gore spomenuto, Visual Basic ne nameće stroga ograničenja na nazive varijabli, ali u isto vrijeme postoje smjernice za nazive varijabli tako da se tip podataka može lako identificirati u tekstu skripte. Da biste to učinili, preporuča se ispred naziva varijable staviti uvjetne simbole koji određuju vrstu varijable:
- iValueName - numerički tipovi
- sValueName - vrsta niza
- bValueName - Booleov tip
- dValueName - datum
- oValueName - objekt
- cValueName - konstanta
- aArrayName - niz
U VBS skriptama moguće je koristiti nizove varijabli koje vam omogućuju pohranjivanje popisa, tablica, pa čak i složenijih struktura. Jednodimenzionalni nizovi (liste) mogu biti dinamički, odnosno dopuštaju promjenu svoje dimenzije tijekom rada skripte. Svi nizovi deklarirani su naredbom Dim:
Dim
Primjer korištenja nizova
Dim aMyArray1(10,10) "stvara statički niz dimenzija 11x11; Dim aMyArray2() "stvara dinamički niz; aMyArray1(0,0) = "Pozdrav" " popunjavanje niza; aMyArray1(0,1) = "Ljudi" " popunjavanje niza; aMyArray1(1,0) = "Svijet" " ispunjava niz.
Prije korištenja dinamičkog polja potrebno je naznačiti trenutnu dimenziju pomoću naredbe ReDim, nakon čega se polje može preformatirati bilo gdje u skripti, bilo brisanjem cijelog polja ili spremanjem starih vrijednosti ćelija naredbom Sačuvaj:
ReDim aMyArray2(0) " formiranje niza od jednog elementa; aMyArray2(0) = "Hello" " popunjavanje niza; ReDim aMyArray2(1) " uklanjanje starog niza i formiranje novog od " ostalih elemenata; aMyArray2(0) = "Hello" " popunjavanje niza; aMyArray2(1) = "Svijet" " popunjavanje niza; ReDim Preserve aMyArray2(2) " formiranje niza od tri elementa, ostavljajući " stare vrijednosti elemenata u ćelijama gdje su bile; aMyArray2(1) = "!" " popunjavanje niza; Erase aMyArray2 " brisanje niza.
Da bi saznali dimenziju niza, obično se koristi funkcija UBound, o kojoj će biti riječi u nastavku zajedno s ostalim funkcijama za rad s podacima.
Grananje po stanju
Niti jedan cjeloviti scenarij nije potpun bez grananja koje pomažu u odabiru pravog puta kada je neki temeljni uvjet ispunjen ili ne. Drugim riječima, grane implementiraju logiku skripte. VBS skripte implementiraju nekoliko mehanizama grananja. Pogledajmo ih redom.
Konstrukcija za jednu radnju izvedenu prema uvjetu:
Ako
Dizajn za nekoliko radnji izvedenih na temelju uvjeta:
Ako
Dizajn vilice:
Ako
Konstrukcija "račvanje u nekoliko staza" (opcija cIf):
Ako
U svim navedenim konstrukcijama vrijedi pravilo: “Ako je uvjet zadovoljen
Konstrukcija "račva u nekoliko staza" (opcija s odabirom):
Odaberite slučaj
U ovoj konstrukciji funkcionira sljedeće pravilo: “Ako vrijednost varijable
Ciklusi
Petlje se obično koriste za organiziranje ponovljenih radnji ili ponavljanje kroz elemente niza. U VBS skriptama organizirano je nekoliko vrsta petlji: regularna petlja, petlja s nepoznatim brojem ponavljanja, uvjetna petlja.
Redovita petlja je organizirana For - Next strukturom, čiji argumenti određuju parametre kao što je naziv brojača (
Za
Ako tijekom rada petlje trebate zaustaviti nabrajanje vrijednosti, to možete učiniti pomoću naredbe Exit For
Za
Petlja s nepoznatim brojem ponavljanja obično se koristi za ponavljanje kroz sve vrijednosti u kolekciji objekta kada je njegova dimenzija nepoznata. Ova struktura će ponavljati sve vrijednosti (
Za svakoga
Za svaku oCurrentFile u oFiles WScript.Echo oCurrentFile.Name Next
Uvjetne petlje se koriste za obradu podataka kada je ispunjen neki uvjet. Postoje dvije vrste takvih petlji: s provjerom na početku ciklusa i s provjerom na kraju.
Vrti petlju dok se uvjet ne ispuni, provjeravajući na početku
Radite dok
Vrti petlju dok se uvjet ne ispuni, provjeravajući na početku
Učinite Do
Kao što je gore spomenuto, uvjeti se mogu postaviti na kraj petlje. U ovom slučaju, tijelo petlje će se izvršiti barem jednom. Baš kao i u uobičajenim petljama, petlja s uvjetom može se prekinuti naredbom Exit Do:
Čini
Ugrađene funkcije
Za rad s podacima i izgradnju njihovih procedura i funkcija programeri Visual Basica već su se pobrinuli za osnovu skripti - osnovne funkcije. VBS skripte funkcioniraju za rad s datumima, nizovima i brojevima, kao i osnovnim ulazno-izlaznim procedurama i mrežnim procedurama. Pogledajmo na brzinu ugrađene funkcije.
Funkcije obrade datuma:
Datum " vraća trenutni datum; Vrijeme " vraća trenutno vrijeme; Sada " vrati trenutni datum i vrijeme; DateDiff(
Funkcije obrade nizova:
Asc(
Matematičke funkcije:
Randomize " inicijalizira mehanizam za odabir slučajnih brojeva (ne vraća ništa); Rnd " vraća slučajnu vrijednost koja nije cijeli broj od 0 do 1; Atn(
I, naravno, uz navedene funkcije, skripte podržavaju sve najjednostavnije matematičke i logičke operacije:
- = - operator dodjele;
- + - zbroj dvaju brojeva;
- - - oduzimanje dvaju brojeva;
- * - množenje dvaju brojeva;
- / - dijeljenje dvaju brojeva;
- \ - cjelobrojno dijeljenje dvaju brojeva;
- Mod - ostatak dijeljenja dvaju brojeva;
- ^ - potenciranje;
- & - ulančavanje dva niza;
- Is - usporedba dva objekta;
- Eqv - usporedba dvaju izraza;
- Ne - operacija logičke negacije;
- And - operacija logičke konjunkcije;
- Ili - logička operacija disjunkcije;
- Xor - operacija logičkog isključivanja;
- Imp je logička operacija implikacije.
Redoslijed operacija je određen kao u svim programskim jezicima: prvo se izvode operacije u zagradama, zatim se računaju funkcije, zatim operacije množenja i dijeljenja, zatim zbrajanja i oduzimanja, a logičke operacije dovršavaju izračun.
Prilagođene funkcije
Skripte napisane u Visual Basicu omogućuju definiranje prilagođenih procedura i funkcija te njihovo pozivanje iz glavnog programa. Praktično nema razlike između procedure i funkcije, razlika je u logičkom značenju ovih rutina: funkcije se obično koriste za izračunavanje neke vrijednosti, a procedure se koriste za izvođenje radnji. Međutim, i procedure i funkcije mogu izvoditi operacije i prosljeđivati vrijednosti glavnom programu. Unatoč tome, ne treba zaboraviti na svrhu ovih potprograma: funkcije za izračune, procedure za akcije.
Funkciju deklarira operator Function, nakon čega slijedi naziv korisnički definirane funkcije, koji se ne smije podudarati ni s jednom rezerviranom riječi jezika Visual Basic, zatim su naznačene varijable koje će biti proslijeđene potprogramu kao parametri - navodeći varijable u ovoj konstrukciji znači dodjeljivanje memorijskih ćelija za varijable potprograma (varijable deklaracije za funkciju). U tijelu potprograma struktura skripte se ne razlikuje od uobičajenog programa (ovdje možete deklarirati dodatne varijable, izvoditi operacije, koristiti druge funkcije i procedure); na kraju tijela mora postojati operator koji dodjeljuje a funkciju na neku vrijednost - ta vrijednost će biti vraćena glavnom programu. Možete prekinuti izvođenje funkcije pomoću naredbe Exit Function, ali u ovom slučaju morate zapamtiti da funkciji dodijelite neku vrijednost, inače će skripta izbaciti pogrešku. Funkcija završava naredbom End Function.
Definicija funkcije
Funkcija
Pozivanje funkcije
Procedura je definirana slično funkciji, ali s drugačijim -Sub operatorom. Budući da procedura ne vraća nikakve vrijednosti u glavni program, ne postoji izjava o dodjeli prije izlaska iz procedure. Izvođenje procedure možete prekinuti naredbom Exit Sub, a cijela konstrukcija završava operatorom End Sub. Da biste pozvali proceduru u glavnom programu, morate koristiti ključnu riječ Call i naziv funkcije s potrebnim argumentima. (Ključna riječ Call nije obavezna, ali preporučujem da je koristite kako biste izbjegli netočne pozive procedura.)
Definicija postupka
Pod
Pozivanje postupka
Usput, procedure i funkcije trebaju se nalaziti na kraju skripte.
Dok potprogram radi, vrijednosti varijabli u glavnom dijelu skripte se ne mijenjaju, čak i ako potprogram sadrži varijable istog imena. Kako bi potprogram mogao mijenjati vrijednosti glavnih varijabli skripte, potrebno je postaviti svojstvo varijable kao ByRef u argumentima potprograma. Prema zadanim postavkama, sve varijable definirane su svojstvom ByVal.
Pod
U ovom slučaju argument
Rješavanje pogrešaka u izvršavanju skripte
Prema zadanim postavkama, skripta automatski obrađuje sve pogreške, a ako se dogodi pogreška, skripta prestaje raditi. Da biste onemogućili automatsko rukovanje pogreškama, morate upotrijebiti posebnu direktivu On Error Resume Next, koja onemogućuje automatsko rukovanje pogreškama i nastavlja skriptu čak i ako postoje pogreške. Za ručno rukovanje pogreškama morate pristupiti ugrađenom Err objektu koji pohranjuje status pogreške. Objekt Err ima sljedeća svojstva i metode:
Broj " vraća broj zadnje greške; Opis " vraća opis zadnje greške; Clear " brisanje objekta Err; Raise " pozivanje testne pogreške.
Primjer ručnog rješavanja grešaka:
On Error Resume Next iTotalPoints = InputBox("Unesite ukupan broj bodova") iNumberOfTests = InputBox("Unesite broj testova") iAvarage = iTotalPoints / iNumberOfTests Select Case Err.Number Case 0 " nema pogrešaka; WScript.Echo "Average rezultat = " & CStr(iAvarage) Slučaj 11 " dijeljenje s nulom; WScript.Echo "Broj testova ne može biti nula" Slučaj 13 "neusklađenost tipa; WScript.Echo "Unijeli ste nenumeričku vrijednost "Case Else" nema grešaka; WScript.Echo "Nepoznata pogreška WScript.Quit" Kraj odabira
Objekti, njihove metode i svojstva
VBS skripte, kao i njihov roditelj Visual Basic, objektno su orijentirani programski jezik, odnosno glavni koncept je koncept objekata i klasa
Klasa je tip koji opisuje strukturu objekata. Objekt znači nešto što ima određeno ponašanje i način predstavljanja; objekt je instanca klase. Klasa se može usporediti s nacrtom prema kojem se kreiraju objekti. Tipično, klase su dizajnirane na takav način da njihovi objekti odgovaraju objektima domene.
Dakle, da biste radili s objektom, prvo ga morate stvoriti koristeći klase iz potrebne biblioteke:
set
Objekt možete izbrisati tako da mu dodijelite vrijednost Ništa:
set
Svi objekti s kojima radi Windows Script Host imaju metode i svojstva. Da biste pristupili metodi, morate navesti objekt, nakon čega slijedi točka - metoda s potrebnim parametrima.
Slična je situacija sa svojstvima, ali se svojstva mogu dodijeliti i učitavati u varijable i druga svojstva, međutim, trebali biste uzeti u obzir tip podataka varijabli i svojstava, inače će skripta izbaciti pogrešku nekompatibilnosti tipa podataka.
Primjer. Stvaranje objekta datotečnog sustava, pozivanje metode stvaranja mape, brisanje objekta. Postavi oFSO = CreateObject("Scripting.FileSystemObject") Pozovi oFSO.CreateFolder("C:\Test") Postavi oFSO = Ništa Imajte na umu da se izraz "objekt" odnosi na logiku skripte, a ne na logiku datotečnog sustava. Odnosno, kada kažemo "brisanje objekta", mislimo na logički objekt skripte koji ni na koji način ne utječe na uklanjanje bilo kojeg dijela datotečnog sustava. Kako biste saznali koje biblioteke postoje u vašem operativnom sustavu, klase uključene u biblioteke, njihove metode i svojstva, možete koristiti preglednik objekata, na primjer iz Microsoft Worda: Ako knjižnica nije prikazana na popisu, može se povezati putem izbornika Alati -> Reference. Skripte imaju metode koje nisu dio nijedne klase, dostupne su izravno u tijelu skripte: MsgBox( Primjer prikazivanja dijaloškog okvira koji traži tekst, a zatim prikazivanja poruke prozora s unesenim tekstom. MyValue = InputBox("Unesite tekst", "Prvi prozor", "Ovdje se mora unijeti tekst") MyResult = MsgBox(MyValue, 1, "Drugi prozor") Metode i svojstva korijenske klase WScript ne zahtijevaju stvaranje objekta - automatski su dostupni za korištenje izravno u tijelu skripte. CreateObject( O korištenju ovih metoda i svojstava raspravljat ćemo detaljnije u primjerima drugih klasa. Za rad s operativnim sustavom koristi se posebna klasa Shell koja vam omogućuje izvođenje takvih operacija kao što su pokretanje programa, promjena registra, stvaranje prečaca, pristup sistemskim mapama i sistemskim varijablama te pristup zapisniku sustava. Dakle, metode i svojstva klase Shell: ExpandEnvironmentStrings( Primjer. Korištenje metoda i svojstava klase Shell. " Stvaranje objekta klase Shell Set oShell = Wscript.CreateObject("WScript.Shell") " Pokretanje kalkulatora oShell.Run("Calc.exe") " Odgoda WScript.Sleep(100) " Pokretanje bilježnice oShell.Run ("Notepad.exe ") " Odgodi WScript.Sleep(100) " Prebaci se na prozor kalkulatora oShell.AppActivate "Calculator" " Odgodi WScript.Sleep(100) " Simuliraj pritiske tipki oShell.SendKeys("1(+)2(= )") " Putanja primanja do radne površine sDesktopPath = oShell.SpecialFolders("Desktop") " Stvaranje prečaca objekta Set oLink = oShell.CreateShortcut(sDesktopPath & "\Test.lnk") " Postavljanje prečaca oLink.TargetPath = WScript .ScriptFullName oLink.WindowStyle = 1 oLink .Hotkey = "CTRL+SHIFT+T" oLink.IconLocation = "notepad.exe,0" oLink.Description = "Test link" oLink.WorkingDirectory = sDesktopPath oLink.Save " Stvaranje objekta okruženja i unos svojstava sustava u njega Set oSysEnv = oShell.Environment("SYSTEM") " Prikaži poruku o broju procesora na ekranu MyResult = oShell.Popup("Broj procesora: " & oSysEnv("NUMBER_OF_PROCESSORS"), _ 3, "Poruka", 0) " Dobivanje putanje mape Windows i prikazivanje poruke na ekranu MyResult = oShell.Popup("Windows direktorij: " & _ oShell.ExpandEnvironmentStrings("%WINDIR%"), 3, "Poruka" , 0) " Čitanje ključa registra i prikazivanje njegove vrijednosti na WScript zaslonu. Echo oShell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductID") " Zapišite vrijednost niza u registar MyResult = oShell.RegWrite( "HKCU\ScriptEngine\Value", "My Value") " Upišite numeričku vrijednost u registar MyResult = oShell.RegWrite("HKCU\ScriptEngine\Key", 1, "REG_DWORD") " Brisanje ključa registra MyResult = oShell. RegDelete("HKCU\ScriptEngine\") " Zapisivanje događaja u zapisnik sustava MyResult = oShell.LogEvent(0 , "Testna skripta dovršena") Kao što smo već vidjeli, VBS skripte mogu raditi s Windows ljuskom, ali to nije njihova jedina sposobnost. Korištenjem klase Network možete pristupiti mrežnim objektima i upravljati njima. Pogledajmo pobliže klasu mreže: ComputerName " vrati naziv računala; UserDomain " vrati naziv domene; UserName " vraća korisničko ime; EnumNetworkDrives " vraća popis mapiranih mrežnih pogona; MapNetworkDrive( Primjer. Korištenje metoda i svojstava klase Network. " Stvaranje objekta klase Network Set oNetwork = WScript.CreateObject("WScript.Network") " Prikaz poruke o nazivu računala WScript.Echo "Computer Name = " & oNetwork.ComputerName " Prikaz poruke o nazivu računala trenutni korisnik WScript.Echo "Korisničko ime = " & oNetwork.UserDomain & "\" & oNetwork.UserName " Mapiranje mrežnog pogona oNetwork.MapNetworkDrive "Z:" "\\Server\Share" " Dobivanje zbirke mapiranih mrežnih pogona Postavi oDrives = oNetwork.EnumNetworkDrives " Prikaz poruka o mapiranim mrežnim pogonima Za i=0 To oDrives.Count -1 korak 2 WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1) Dalje " Uklanjanje mrežnog pogona oNetwork.RemoveNetworkDrive "Z:" " Povezivanje mrežnog pisača oNetwork.AddPrinterConnection "LPT1", "\\Server\Printer" " Postavljanje zadanog pisača oNetwork.SetDefaultPrinter "\\Server\Printer" " Dobivanje kolekcija povezanih pisača Postavite oPrinters = oNetwork.EnumPrinterConnections Vrlo često u scenarijima postoje takvi slučajevi kada je potrebno stvoriti, izbrisati, premjestiti ili promijeniti nešto na disku računala. Ovaj problem može riješiti klasa FileSystemObject, dizajnirana za rad sa datotečnim sustavom. Sljedeći su objekti koje ova klasa može stvoriti: Metode i svojstva klase FileSystemObject (glavni objekt): BuildPath( Objekti Drives, Folders and Files klase FileSystemObject pohranjuju informacije o pogonima, mapama i datotekama i uglavnom se koriste za prikupljanje informacija o sustavu datoteka. Imaju samo dva svojstva: Count " vraća broj stavki u kolekciji; Item( Da bi bilo jasnije što je zbirka objekata, razmotrite primjer prikaza popisa datoteka u korijenu pogona C: " Stvaranje objekta klase FileSystemObject Set oFSO = CreateObject("Scripting.FileSystemObject") " Stvaranje objekta skupa mapa oFolder = oFSO.GetFolder("C:\") " Dobivanje kolekcije datoteka Set oFilesCollection = oFolder.Files " Dobivanje broja elemenata u kolekciji sResult = sResult & oFilesCollection.Count & " datoteke u C:\" & vbCrLf " Pročitajte atribute svake datoteke iz kolekcije Za svaku oFile u oFilesCollection sResult = sResult & oFile.Name & vbTab sResult = sResult & oFile.Size & vbCrLf Next " Ispis rezultata na zaslon MsgBox(sResult) Objekt Drive omogućuje pristup svojstvima lokalnog ili mrežnog pogona: AvailableSpace " vraća količinu slobodnog prostora na disku dostupnom korisniku; DriveLetter " vraća slovo pogona; DriveType " vraća vrstu pogona; FileSystem " vraća tip datotečnog sustava pogona; FreeSpace " vraća količinu slobodnog prostora na disku; IsReady " vraća dostupnost diska; Path " vraća stazu do diska; RootFolder " stvara objekt Folder koji pokazuje na korijen diska; SerialNumber " vraća serijski broj diska; ShareName " vraća mrežni naziv diska; TotalSize " vraća kapacitet diska u bajtovima; VolumeName " vraća ili postavlja oznaku diska. Objekt Folder omogućuje pristup svim svojstvima mape i također vam omogućuje izvođenje radnji na njoj: Attributes " vraća atribute mape; DateCreated " vraća datum stvaranja mape; DateLastAccessed " vraća datum zadnjeg pristupa mapi; DateLastModified " vraća datum kada je mapa izmijenjena; Pogon " vraća slovo pogona mape; Datoteke " vraća kolekciju datoteka u mapi; IsRootFolder " vraća True ako je mapa korijen diska; Name " vraća naziv mape; ParentFolder " stvara objekt Folder koji pokazuje na " nadređenu mapu; Path " vraća putanju mape; ShortName " vraća naziv mape u formatu 8.3; ShortPath " vraća putanju do mape u formatu 8.3; Veličina " vraća veličinu mape; SubFolders " vraća kolekciju podmapa; Type " vraća vrstu mape; Kopirati( Objekt File sličan je objektu Folder - omogućuje pristup svim svojstvima datoteke, a također vam omogućuje izvođenje radnji na njoj: Attributes " vraća atribute datoteke; DateCreated " vraća datum stvaranja datoteke; DateLastAccessed " vraća datum zadnjeg pristupa datoteci; DateLastModified " vraća datum kada je datoteka izmijenjena; Drive " vraća slovo pogona datoteke; Name " vraća naziv datoteke; ParentFolder " stvara objekt Folder koji pokazuje na " nadređenu mapu; Path " vraća putanju do datoteke; ShortName " vraća naziv datoteke u formatu 8.3; ShortPath " vraća putanju do datoteke u formatu 8.3; Veličina " vraća veličinu datoteke; Vrsta " vraća vrstu datoteke; Kopiraj( Objekt TextStream je alat za pristup sadržaju datoteke. Možete ga koristiti za čitanje i izmjenu datoteke: AtEndOfLine " pokazuje da li je dosegnut kraj retka; AtEndOfStream " pokazuje da li je dosegnut kraj retka; Stupac " vraća broj stupca u kojem se nalazi kursor za čitanje; Linija " vraća broj retka u kojem se nalazi kursor za čitanje; Zatvori " zatvara datoteku - oslobađa je za druge procese; Read( Upoznali smo se sa svim metodama i svojstvima klase FileSystemObject, pogledajmo primjer korištenja ove klase: " Postavljanje stalnih kodova za sistemske mape Const WindowsFolder = 0 Const SystemFolder = 1 Const TemporaryFolder = 2 " Postavljanje konstantnih kodova za vrste pristupa tekstualnoj datoteci Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 " Stvaranje objekta klase FileSystemObject Set oFSO = CreateObject(" Scripting.FileSystemObject") " Dohvaćanje kolekcije pogona Set DrivesCollection = oFSO.Drives " Obrada svakog pogona da bi se dobila njegova oznaka ili naziv mreže Za svaki oDrive u DrivesCollection sResult = sResult & oDrive.DriveLetter & ": " If oDrive.DriveType = Remote Then sResult = sResult & oDrive.ShareName & vbCrLf ElseIf oDrive.IsReady Then sResult = sResult & oDrive.VolumeName & vbCrLf Else sResult = sResult & vbCrLf End If Next " Prikaz rezultata Wscript.Echo(sResult) " Stvaranje pogonskog objekta C: Postavite oDrive = oFSO.GetDrive("C") sResult = oDrive.DriveLetter & ": - " " Dobivanje tipa pogona C: Odaberite Case oDrive.DriveType Slučaj 0: sResult = sResult & "Unknown - " Slučaj 1: sResult = sResult & "Removable - " Slučaj 2: sResult = sResult & "Fixed - " Slučaj 3: sResult = sResult & "Network - " Slučaj 4: sResult = sResult & "CD-ROM - " Slučaj 5: sResult = sResult & "RAM Disk - " End Select " Odredite je li disk dostupan i dohvatite njegova svojstva If oDrive.IsReady Then sResult = sResult & "Ready" & vbCrLf sResult = sResult & "FileSystem is " & oDrive.FileSystem & vbCrLf sResult = sResult & "Available Space: " & _ FormatNumber( oDrive.AvailableSpace/1024, 0) & " Kbytes" Else sResult = sResult & "Not ready" End If " Prikaz rezultata na zaslonu Wscript.Echo(sResult) " Stvaranje usluge objekt mape (mapa privremenih datoteka Windows) Postavite oTempFolder = oFSO. GetSpecialFolder(TemporaryFolder) " Stvorite objekt tekstualne datoteke (i stvorite ga u korijenu pogona C:) Postavite oFile = oFSO.CreateTextFile("C:\TestFile.txt) ", True) " Pisanje u tekstualnu datoteku oFile.WriteLine("Ovo je test.") oFile.WriteLine(sResult) " Zatvara tekstualnu datoteku i oslobađa je za druge procese oFile.Close " Provjerava prisutnost datoteke u mapi privremenih datoteka sustava Windows briše datoteku If oFSO.FileExists(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) Then _ oFSO.DeleteFile(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt") ) " Stvorite objekt datoteke Postavite oFile = oFSO.GetFile("C:\TestFile.txt") " Premjestite datoteku u mapu privremenih datoteka sustava Windows oFile.Move(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) " Promjena atributa datoteke Ako je oFile.Attributes i 32 Zatim oFile. Attributes = oFile.attributes - 32 Wscript.Echo("Arhivski bit je izbrisan") Else oFile.Attributes = oFile.attributes + 32 Wscript.Echo("Arhivski bit je postavljen") End If sResult = oFile.Path & vbCrLf & oFile .DateLastModified & ":" & vbCrLf " Stvorite objekt toka otvaranjem datoteke za čitanje Postavite oTestFile = oFSO.OpenTextFile(oFile.Path, ForReading, False) " Čitajte tok dok se ne naiđe na kraj Do Dok oTestFile.AtEndOfStream<>True sResult = sResult & oTestFile.ReadLine Loop " Zatvara tekstualnu datoteku i oslobađa je za druge procese oTestFile.Close " Ispisuje poruku na ekran Wscript.Echo(sResult) Ova skripta dizajnirana je za čišćenje sustava od zastarjelih datoteka u Windows privremenim imenicima i korisničkim profilima. U ovom primjeru možete vidjeti kako rade gotovo sve gore navedene konstrukcije: struktura skripte, imenovanje varijabli, rad s nizovima i zbirkama, ručno rukovanje pogreškama, čitanje varijabli sustava, stvaranje tekstualne datoteke za bilježenje skripte, rad sa sustavom datoteka , korištenjem postupaka. " ==== Zaglavlje informacija o skripti ==== " naziv skripte: Temp čišćenja " verzija: 1.0 " datum: 16.07.08 " autor: Bochkarev Vitaly " opis: Skripta briše zastarjele privremene datoteke s računala " == == Glavna logika skripte ==== " Omogući ručno rukovanje pogreškama On Error Resume Next " Vremenski interval konstantan kada se datoteke smatraju ustajalim Const PurgeTime = 14 " dana " Iznimke - korisnički profili koji se ne bi trebali obrađivati Dim aExceptions(3) aExceptions( 0) = " Zadani korisnik" aExceptions(1) = "LocalService" aExceptions(2) = "NetworkService" aExceptions(3) = "Svi korisnici" " Stvaranje objekata ljuske i datotečnog sustava Postavi oShell = CreateObject("wscript.shell") Postavite oFSO = CreateObject ("Scripting.Filesystemobject") " Definiranje staza servisne mape sProgramFiles = oShell.ExpandEnvironmentStrings("%ProgramFiles%") sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%") sWinTempFolder = sWinDir & "\Temp" sDocuments = "C:\ Dokumenti i postavke" " Stvaranje datoteke dnevnika skripte sLogFileName = sWinTempFolder & "\PurgeTemp_" & Datum sLogFileName = Zamijeni(sLogFileName, ".", "_") sLogFileName = Zamijeni(sLogFileName, "/", "_ ") Postavite oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true) oLogFile.WriteLine "========== Započni čišćenje ==========" " Čišćenje Windowsa privremena mapa oLogFile.WriteLine vbCrLf & "========== Windows privremena mapa ==========" PurgeFolder(sWinTempFolder) " Čišćenje privremene mape korisničkog profila i internetskih datoteka oLogFile. WriteLine vbCrLf & _ "===== ===== Privremena mapa korisnika i privremene internetske datoteke korisnika ==========" Postavi oDocuments = oFSO.GetFolder(sDocuments) Postavi colProfiles = oDocuments.Podmape za Svaki oProfile u colProfiles bFlag = false Za svaki sException u aExceptions if InStr(oProfile.Path,sException) > 0 then bFlag = true izlaz za kraj if Next If bFlag = False Then PurgeFolder(oProfile.Path & "\Local Settings\Temp" ) PurgeFolder(oProfile.Path & "\Local Settings\Temporary Internet Files") End If Next " Brisanje NOD32 karantene oLogFile.WriteLine vbCrLf & "========== NOD32 karantena ========= ==" sQuarantine = sProgramFiles & "\Eset \Infected" PurgeFolder(sQuarantine) " Zatvaranje datoteke dnevnika oLogFile.WriteLine vbCrLf & "========== Zaustavi čišćenje =========== " oLogFile.Close " Postupak PurgeFolder - brisanje starih datoteka Sub PurgeFolder(sFolderPath) " Stvaranje objekta skupa mapa oFolder = oFSO.GetFolder(sFolderPath) " Dohvaćanje kolekcije datoteka Set colFiles = oFolder. Datoteke " Obradi svaku datoteku u kolekciji Za svaku oDatoteku u colFiles " Provjerite je li datoteka zastarjela If (Date-oFile.DateLastModified) > PurgeTime i (Date-oFile.DateCreated) > _ PurgeTime Then " Napišite poruku zapisnik skripte oLogFile.Writeline oFile.Path & vbTab & oFile.DateCreated " Brisanje zastarjele datoteke oFSO.DeleteFile oFile.Path, True " Provjera grešaka ako je err.Number<>0 zatim " Napišite poruku o pogrešci u dnevnik skripte oLogFile.Writeline "-----> Greška # " & CStr(Err.Number) _ & " " & Err.Description " Obrišite grešku Err. Obriši kraj ako " Pauza 20 milisekundi WScript.Sleep 20 End if Next " Primanje kolekcije podmapa Set colSubFolders = oFolder.SubFolders " Obrada svake podmape za svaku oSubFolder u colSubFolders " Rekurzivno pozivanje procedure za brisanje starih datoteka - potprogram poziva " sebe PurgeFolder(oSubFolder.Path ) " Provjera veličine mape If oSubFolder.Size = 0 Then " Napišite poruku u zapisnik skripte oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated " Izbrišite praznu mapu oFSO.DeleteFolder oSubFolder.Path " Provjerite ima li pogrešaka Ako err .Broj<>0 zatim " Napišite poruku o pogrešci u zapisnik skripte oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _ & " " & Err.Description " Obrišite pogrešku Err.Clear End if End if Sljedeći kraj Sub Do sada smo naučili osnove Visual Basic Scripta. Sažmimo i odredimo prednosti i nedostatke takvih scenarija: Vitalij Bočkarev Odjeljak vanjskih poveznica, odnosno poveznica na druge stranice s kojima ovaj resurs nema nikakve veze, osim toga, vlasnik stranice ne snosi nikakvu odgovornost za dostupnost ovih izvora i njihov sadržaj. Nekako sam potpuno pretrčao i nisam vam rekao za dva Funkcije dijaloškog okvira: MsgBox i InputBox. U ovoj vrlo kratkoj lekciji reći ću vam o svim gadgetima za ove dvije funkcije. Postoje i drugi načini za stvaranje dijaloških okvira, ali to će zahtijevati WSH objekti, o čemu će biti riječi u narednim lekcijama. Najčešća funkcija za prikaz poruke. Naravno da je kompliciranije od Odjek WScript objekta, ali ni njoj ne treba predmet. Parametar Gumbi može istovremeno poprimiti više vrijednosti. Da biste ih označili, upotrijebite znak “+” ili jednostavno upotrijebite zbroj vrijednosti. Vrijednosti za ovaj parametar date su u nastavku. Vrijedno je napomenuti da je parametar Gumbi ne može prihvatiti više vrijednosti iz iste kategorije. Ove vrijednosti će se jednostavno zbrojiti. To jest, nećete moći instalirati nekoliko skupova gumba ili ikona u isto vrijeme. "VBScript lekcija br. 16: "Funkcija MsgBox i InputBox "file_1.vbs"************************************ * ********************* MsgBox "Hello", 5+16, "Title" MsgBox "Hello", vbRetryCancel+16, "Title" MsgBox "Hello " , vbRetryCancel+524288, "Naslov" MsgBox "Hello", vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288, "Title" MsgBox "Hello", 528706, "Title" "********************************************************
"VBScript lekcija #16: "MsgBox i funkcija InputBox "datoteka_1.vbs "********************************************************
MsgBox "Zdravo", 5 + 16, "Naslov" MsgBox "Hello" , vbRetryCancel + 16 , "Title" MsgBox "Hello" , vbRetryCancel + 524288 , "Title" MsgBox "Hello" , vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288 , "Title" MsgBox "Zdravo", 528706, "Naslov" Osim toga, funkcija MsgBox može vratiti rezultat klikova na gumb. Može se dodijeliti varijabli i na taj način odrediti pritisnutu tipku. "************************************************ ******* "VBScript lekcija br. 16: "MsgBox i funkcija InputBox "file_2.vbs"**************************** *********** ***************************** Dim Knopka Knopka = MsgBox("Pritisnite bilo koji gumb ",2,"Naslov") If Knopka = 3 Then MsgBox "Pritisnuli ste gumb - Prekini" ElseIf Button = 4 Then MsgBox "Pritisnuli ste gumb - Ponovi" Else MsgBox "Pritisnuli ste gumb - Preskoči" End If "************************************************ ******* "VBScript lekcija br. 16: "MsgBox i funkcija InputBox "file_4.vbs"**************************** *********** ***************************** Dim Dict, AboutBomb Set Dict = CreateObject(" Scripting.Dictionary") Dict.CompareMode = 1 Dict .Dodaj "Žuto", "Bomba je eksplodirala!" Dict.Dodaj "Crveno", "Deaktivirali ste bombu!" Dict.Dodaj "Plavo", "Bomba je eksplodirala!" Dict.Add "Green", "Bomba je eksplodirala!" AboutBomb = InputBox("Otkrivena bomba!!! Koju žicu trebate presjeći: žutu, crvenu, plavu ili zelenu??","Otkrivena bomba!!! ","Ovdje unesite boju žice...") If Dict.Exists(AboutBomb) then MsgBox Dict.Item(AboutBomb) else MsgBox "Vid vam je loš! Takva žica ne postoji! Bomba je eksplodirala!!!" end if "********************************************************
Metode i svojstva WScript korijenske klase
Metode i svojstva klase Shell
Metode i svojstva klase Network
Metode i svojstva klase FileSystemObject
Scenarij "Brisanje starih datoteka"
vanjske poveznice
Funkcija MsgBox
Sintaksa: MsgBox (Prompt[, gumbi][, naslov][, datoteka pomoći, kontekst])Konstante za dijaloške okvire (gumbi za prikaz):
Konstante za dijaloške okvire (prikazane ikone):
Konstante za dijaloške okvire (zadani gumbi):
Konstante za dijaloške okvire (način prozora):
ostalo:
Vrati rezultat pritisnutih tipki (konstante):