Mam ten skrypt zapisany w „test.vbs”:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile(workFolder &"\test.txt", 2, True)
File.Write "testing"
File.Close
Set File = Nothing
Set FSO = Nothing
Set workFolder = Nothing
Po uruchomieniu skryptu chcę przekazać wartość zmiennej „workFolder”.
Jak mogę to zrobić? Czy mogę to zrobić? Może coś w rodzaju „cscript test.vbs workFolder: 'C: \ temp \'”?
Pytanie dodatkowe: czy konieczne jest wyczyszczenie przekazanej zmiennej za pomocą polecenia „Set workFolder = Nothing”, czy też VBSCript robi to automatycznie po zakończeniu? Może „Set File = Nothing” i „Set FSO = Nothing” też są niepotrzebne? Daj mi znać, jeśli znasz odpowiedź na oba te pytania.
Wewnątrz VBS można uzyskać dostęp do parametrów za pomocą
Wscript.Arguments(0) Wscript.Arguments(1)
i tak dalej. Liczba parametrów:
źródło
Dostęp do każdego argumentu przekazanego w linii poleceń można uzyskać za pomocą: Wscript.Arguments.Item (0) Gdzie zero jest numerem argumentu: tj. 0, 1, 2, 3 itd.
Więc w swoim kodzie możesz mieć:
strFolder = Wscript.Arguments.Item(0) Set FSO = CreateObject("Scripting.FileSystemObject") Set File = FSO.OpenTextFile(strFolder, 2, True) File.Write "testing" File.Close Set File = Nothing Set FSO = Nothing Set workFolder = Nothing
Korzystając z wscript.arguments.count, możesz błędnie przechwycić pułapkę na wypadek, gdyby ktoś nie wprowadził prawidłowej wartości itp.
Przykłady MS Technet
źródło
workFolder
nie jest zdefiniowany jako przedmiot ani w powyższej odpowiedzi, ani w pierwotnym pytaniu, więcSet workFolder = Nothing
powinno powodować błąd. 2) Ponieważ argument nie jest sugerowany jako wymagający ponownego użycia więcej niż jeden raz, może pomiń przypisanie go dostrFolder
zmiennej. 3) Sugerowałbym używaniex
zamiast0
inWscript.Arguments.Item(0)
Możesz także użyć nazwanych argumentów, które są opcjonalne i mogą być podawane w dowolnej kolejności.
Set namedArguments = WScript.Arguments.Named
Oto mała funkcja pomocnicza:
Function GetNamedArgument(ByVal argumentName, ByVal defaultValue) If WScript.Arguments.Named.Exists(argumentName) Then GetNamedArgument = WScript.Arguments.Named.Item(argumentName) Else GetNamedArgument = defaultValue End If End Function
Przykład VBS:
'[test.vbs] testArg = GetNamedArgument("testArg", "-unknown-") wscript.Echo now &": "& testArg
Przykładowe zastosowanie:
test.vbs /testArg:123
źródło
Aby odpowiedzieć na Twoje dodatkowe pytanie, ogólna odpowiedź brzmi: nie, nie musisz ustawiać zmiennych na „Nothing” w krótkich skryptach .VBS, takich jak twój, które są wywoływane przez Wscript lub Cscript.
Powodem, dla którego możesz to zrobić w środku dłuższego skryptu, jest zwolnienie pamięci z powrotem do systemu operacyjnego, którą w innym przypadku przechowywałby VB. W dzisiejszych czasach, gdy 8 GB pamięci RAM jest typowe i 16 GB + stosunkowo powszechne, jest mało prawdopodobne, aby miało to jakikolwiek wymierny wpływ, nawet na ogromny skrypt, który ma kilka megabajtów w jednej zmiennej. W tym momencie jest to trochę wstrzymanie od dni, w których mogłeś pracować w 1 MB lub 2 MB pamięci RAM.
Masz rację, w momencie zakończenia skryptu .VBS wszystkie twoje zmienne zostają zniszczone, a pamięć i tak zostaje odzyskana. Ustawienie zmiennych na „Nothing” po prostu przyspiesza ten proces i pozwala na zrobienie tego w środku skryptu.
źródło