2009-04-21 24 views
14

Uratowałem ten VBScript skrypt do mojego komputera lokalnego jako C: \ test.vbs:Dlaczego ten VBScript daje mi błąd?

WScript.StdOut.WriteLine "This is a test" 

Kiedy go uruchomić z wiersza poleceń, otrzymuję ten błąd:

--------------------------- 
Windows Script Host 
--------------------------- 
Script: C:\test.vbs 
Line: 1 
Char: 1 
Error: The handle is invalid. 
Code: 80070006 
Source:  (null) 

--------------------------- 
OK 
--------------------------- 

uzyskać to w systemach Windows Vista (SP1) i Windows XP Pro (SP3).

Odpowiedz

30

Ten link może pomóc:

http://www.tech-archive.net/Archive/Scripting/microsoft.public.scripting.vbscript/2004-07/0979.html

Wydaje się, że uchwyt StdOut jest dostępny tylko w przypadku korzystania z konsoli (cscript.exe hosta), a nie z okienkiem hosta (wscript.exe). Jeśli chcesz, aby kod działał, musisz użyć cscript.exe, aby go uruchomić.

Post opisuje także, jak zmienić domyślne zachowanie, aby uruchamiać skrypty za pomocą cscript, a nie wskrzeszać.

6

Jak opisał artykułu w przyjętym odpowiedź, mój skrypt działał kiedy zadzwoniłem go z wiersza polecenia jak poniżej:

cscript test.vbs 

Można również zmienić host domyślny skrypt tak, że wezwanie do CSCRIPT nie jest konieczne za każdym razem. Po wykonaniu tego pierwotne polecenie działa niezmodyfikowane.

cscript //h:cscript //s 

można przywrócić oryginalne zachowanie z:

cscript //h:wscript //s 

Dzięki !!

1

Złożyłem to rozwiązanie w błędzie "cscript - print output on same line on console?", co moim zdaniem jest związane z tym problemem.

Używam następującej funkcji "log" w moim JavaScript, aby obsługiwać środowisko wscript lub cscript. Jak widać, ta funkcja wypisze na standardowe wyjście tylko, jeśli to możliwe.

var ExampleApp = { 
    // Log output to console if available. 
    //  NOTE: Script file has to be executed using "cscript.exe" for this to work. 
    log: function (text) { 
     try { 
      // Test if stdout is working. 
      WScript.stdout.WriteLine(text); 
      // stdout is working, reset this function to always output to stdout. 
      this.log = function (text) { WScript.stdout.WriteLine(text); }; 
     } catch (er) { 
      // stdout is not working, reset this function to do nothing. 
      this.log = function() { }; 
     } 
    }, 
    Main: function() { 
     this.log("Hello world."); 
     this.log("Life is good."); 
    } 
}; 

ExampleApp.Main(); 
+0

zgodnie z tym http://stackoverflow.com/questions/4999364/try-catch-end-try-in-vbscript vbscript nie próbuje catch. czy jesteś w stanie ustawić zmienną w zależności od tego, jaki to jest przypadek, w vbscript? – barlop

Powiązane problemy