Windows - Argumentumok használata szkriptekben

forráskód letöltése
Egy program felhasználóval való kommunikációjának egyik módja az argumentumok vagy más néven parancssori paraméterek indításkori átadása. Megoldható, hogy párbeszédpaneleken keresztül kérjük be a működéshez szükséges értékeket, de batchfájloknál, parancsikonoknál és egyéb automatizmust segítő eljárásoknál ez nem megfelelő. Ez esetben marad a paraméterezett indítás. Az alábbiakban a Windows Scripting Host (WSH) lehetőségeit ismertetjük VBScript példákon keresztül.
Cikkünkhöz mellékeltük az alábbiakban szereplő szkripteket:
"Args.vbs" - Felsorolja az összes - a szkript neve után beírt - paramétert.
"CheckNamed.vbs" - Megszámolja a különböző típusokat.
"ItemKey.vbs" - Egy konkrét paraméternek adja vissza az értékét.
"Exist.vbs" - Egy konkrét paraméter előfordulását ellenőrzi és igaz/hamis logikai eredményt ad vissza.
A WSH beépített támogatást tartalmaz a "WSHArguments" objektumon keresztül. Ez nem más, mint a Wscript objektum paramétereinek gyűjteménye, tulajdonságokkal ellátva. Ha egy szkriptet paraméterezünk a következő feltételekkel kell számolni:
  • A szkripthívás elsődleges módja a parancssori CSCRIPT.EXE-vel való futtatás.
  • Az egyes paramétereket szóközzel vagy / jellel kell elválasztani.
  • Sorrendjük kötött (függ a feldolgozó szkript-től is).
A WSCRIPT-el történő, például az Intézőből indított közvetlen futtatás során nincs lehetőség a paraméterek átadására. Kivéve, ha parancsikont hozunk létre, de ez már nem jelent közvetlen szkript futtatást. Minden egyes paramétert szóközzel vagy / jellel kell elválasztani a másiktól, ugyanis a feldolgozómotor így tudja szétválasztani őket. Itt következik egy fontos kérdés: hogy lehet eldönteni, hogy a felhasználó hányat adott meg? A sort egy enter zárja, de nem kell vele foglalkoznunk, mert a WSH megszámolja helyettünk és az eredményt elhelyezi a "Count", Integer típusú tulajdonságban (JScript-ben: "Length"). A "WScript.Arguments" objektum tömb tárolja a beírt paramétereket. Definiálni kell az objektumot, egy ciklussal fel lehet dolgozni az összes példányát egészen a "Count" által meghatározott számig. Nézzünk egy példát: írassuk ki a képernyőre a felhasználó által beírt összes paramétert egymás alá.
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
   WScript.Echo objArgs(I)
Next
Mentsük el a szkriptet ARGS.VBS néven és futtassuk parancssorból:
cscript args.vbs Windows Software Online
Az argumentumokat két csoportra lehet osztani: az egyik rendelkezik névvel (named), a másik nem (unnamed). A kettő közötti különbség, hogy a név nélküliek csak egy felsorolás szóközzel elválasztott tagjai. Például:
cscript CheckNamed.vbs 123 abc 456 def
A névvel rendelkezők pedig /név:érték formában vannak megadva. Például:
cscript CheckNamed.vbs /c:1 /d:2
Írjunk egy másik szkriptet és írjuk ki, hogy a megadott paraméterek közül hány darab a named és az unnamed típusú. Előbbit a "WScript.Arguments.Named", utóbbit a "WScript.Arguments.Unnamed" tulajdonságok tárolják. Darabszámukat a fent megismert "Count" tulajdonságból tudjuk meg.
Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed
WScript.Echo "Named típus " & argsNamed.Count & " db"
WScript.Echo "Unnamed típus " & argsUnnamed.Count & " db"
Mentsük a forrást "CheckNamed.vbs" néven és futtassuk az előbbi változatokban:
cscript CheckNamed.vbs 123 abc 456 def
cscript CheckNamed.vbs /c: /d:
A két paramétertípust variálhatjuk is:
cscript CheckNamed.vbs /c:1 /d:2 123 abc
A named típusnál tágabbak a lehetőségek. Ha tudjuk a paraméter nevét, akkor megkereshetjük a felsorolásban és feldolgozhatjuk az értékét. Következő szkriptünk neve "ItemKey.vbs", egyetlen sorból áll:
WScript.Echo WScript.Arguments.Named.Item("word")
Futtatása után a megadott paraméterek közül kikeresi a "word" nevűt és kiírja az értékét. Ha nem találja meg, akkor nem ír ki semmit. Próbáljuk meg az alábbi módokon elindítani:
cscript ItemKey.vbs 123 abc /f:456 def /word:Hello
cscript ItemKey.vbs /word:Hello 123 abc /f:456 def
cscript ItemKey.vbs /word:Hello 123 abc /f:456 def /word:Valami
A futtatás eredménye minden esetben "Hello" lesz. Az első két példa alapján látszik, hogy teljesen mindegy, hogy hol helyezkedik el a "word". A WSH kikeresi és értelmezi. A harmadik példában kétszer is szerepelt, ilyenkor csak az első kerül feldolgozásra.
Nem kötelező azonnal lekérni az értékét. Csak ellenőrizzük, hogy szerepel-e. Ezt valósítja meg következő - szintén egysoros - "Exist.vbs" nevű szkriptünk:
WScript.Echo(WScript.Arguments.Named.Exists("word"))
Ha szerepel a paraméterek sorában a "word", akkor a futtatás eredménye -1. Ha nem, akkor 0.