2017-01-05 30 views
5

W Windows 7, pojawia się błąd o następującej linii w moim VBScript:Czy wsh jest słowem zarezerwowanym w VBScript?

Set wsh = WScript.CreateObject("WScript.Shell") 

Błąd:

Microsoft VBScript runtime error: Wrong number of arguments or invalid property assignment: 'wsh'

Korzystanie dowolną nazwę inną niż wsh prac.

Przeszukałem internet w poszukiwaniu informacji, ale strony zarezerwowanych słów kluczowych nie zawierają żadnej wzmianki o wsh.

Uruchom powyższy skrypt za pomocą polecenia cscript w procesorze CMD.

UPDATE za pytaniem odpowiedział:

Deklarując zmienną jako Dim wsh nadpisuje jego stan słów kluczowych, co pozwala na jego stosowanie w skrypcie. Natknąłem informacji po zaksięgowaniu pytanie, tutaj: http://forums.devshed.com/visual-basic-programming-52/bizzare-finding-username-918597.html

+3

Tak. 'wsh' jest wbudowanym aliasem dla obiektu [' WScript'] (https://msdn.microsoft.com/en-us/library/at5ydy31.aspx). –

+2

@AgargarWiechers Nie mogę znaleźć tego udokumentowanego w dowolnym miejscu. To dobre pytanie. Nigdy nie spotkałem 'wsh' przedtem przez wszystkie moje lata. –

+0

@ rory.ap Nie sądzę, że jest to udokumentowane w dowolnym miejscu (przynajmniej nie widziałem żadnej dokumentacji, która to wymyśliła). Myślę, że dowiedziałem się o tym na forach visualbasicscript.com kilka lat temu. –

Odpowiedz

8

wsh jest wbudowany alias dla obiektu WScript, dzięki czemu można napisać

wsh.Echo "foo" 
wsh.StdErr.WriteLine "bar" 
wsh.Quit 42 

zamiast

WScript.Echo "foo" 
WScript.StdErr.WriteLine "bar" 
WScript.Quit 42 

Według mojej wiedzy to nie jest jednak objęty dokumentacją.


Edit: Najwyraźniej można obejść ten problem poprzez zdefiniowanie wsh jako zmiennej przed jej użyciem:

Dim wsh 
Set wsh = CreateObject("WScript.Shell") 

jednak pamiętać, że spowoduje to całkowicie zamaskować oryginalny identyfikator, czyli ci nie będzie w stanie przywrócić oryginalnego zachowania bez opuszczania kontekstu, w którym zdefiniowano zmienną (co w przypadku zmiennych globalnych oznacza ponowne uruchomienie interpretera), ponieważ jesteś can't un-dim a variable.