Czy mogę przekazać argument do VBScript(plik VBS uruchomiony z cscript)?
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
Podczas uruchamiania skryptu chcę przekazać wartość zmiennej "workFolder".
Jak mogę to zrobić? Mogę to zrobić? Coś w stylu "test cscript.VBS workFolder: "C:\temp\ '" może?Dodatkowe pytanie: czy konieczne jest wyczyszczenie przekazanej zmiennej za pomocą "Set workFolder = Nothing", czy też VBSCript robi to automatycznie po jej zakończeniu? Może "Set File = Nothing" I "Set FSO = Nothing" jest również unneccessary? Proszę. daj mi znać, jeśli znasz odpowiedź na oba te pytania.
5 answers
Możesz użyć WScript.Arguments
, aby uzyskać dostęp do argumentów przekazanych do twojego skryptu.
Wywołanie skryptu:
cscript.exe test.vbs "C:\temp\"
Wewnątrz twojego skryptu:
Set File = FSO.OpenTextFile(WScript.Arguments(0) &"\test.txt", 2, True)
Nie zapomnij sprawdzić, czy rzeczywiście został przekazany argument do skryptu. Możesz to zrobić sprawdzając właściwość Count
:
if WScript.Arguments.Count = 0 then
WScript.Echo "Missing parameters"
end if
Jeśli twój skrypt jest skończony po zamknięciu pliku, nie ma potrzeby ustawiania zmiennych na Nothing
. Zasoby zostaną wyczyszczone automatycznie, gdy cscript.proces exe kończy się. Ustawienie zmiennej na Nothing
jest zwykle konieczne tylko wtedy, gdy wyraźnie chcesz zwolnić zasoby podczas wykonywania skryptu. W takim przypadku zmienne zawierające odniesienie do obiektu COM ustawisz na Nothing
, co zwolni obiekt COM przed zakończeniem skryptu. Jest to tylko krótka odpowiedź na twoje pytanie bonusowe, więcej informacji znajdziesz w tych powiązanych pytaniach:
Czy istnieje potrzeba ustawiania obiektów na nic wewnątrz funkcji VBA]}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:24
Wewnątrz VBS możesz uzyskać dostęp do parametrów za pomocą
Wscript.Arguments(0)
Wscript.Arguments(1)
I tak dalej. Liczba parametru:
Wscript.Arguments.Count
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-10 21:58:08
Do każdego argumentu przekazywanego przez linię poleceń można uzyskać dostęp za pomocą: Wscript.Argumenty.Pozycja (0) gdzie zero jest liczbą argumentów: ie, 0, 1, 2, 3 itd.
Więc w Twoim 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
Za pomocą wscript.argumenty.count, możesz pułapkę błędów w przypadku, gdy ktoś nie wprowadzi odpowiedniej wartości, itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-10 21:56:31
Właściwie odpowiedź na pytanie bonusowe brzmi "nie". Nie musisz sprzątać. Ale ogólna praktyka programowania polega na tym, aby zawsze sprzątać swoje rzeczy, jak po kolacji, pls oczyścić swój talerz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-15 19:09:55
W nauczaniu nowych programistów prawidłowa odpowiedź na pytanie " Czy powinienem posprzątać?"zawsze jest tak. Jeśli ktoś ma zwyczaj sprzątania, to będzie sprzątał. Wtedy, gdy jest to rzeczywiście wymagane (aby nie zrobić bałaganu ze sterty itp.), sprzątanie jest nawykiem i będzie się działo.
Lepsze pytanie brzmi: "czy to powoduje problem, jeśli posprzątam na końcu tego skryptu?"albo nawet lepiej... "Zakładając, że kontynuuję z długim skryptem (lub nie mam dostępnego GC) , czy jest to poprawne sposób na oczyszczenie tych obiektów?"
Moje dwa centy. PawełWarning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-30 03:35:01