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.

Author: Peter, 2010-05-11

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]}

Kiedy muszę ustawić zmienną na " nic " w VB6?

 116
Author: Dirk Vollmar,
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
 17
Author: Oleg,
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.

MS Technet examples

 5
Author: unrealtrip,
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.

 2
Author: Eric Ng,
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ł
 2
Author: Paul,
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