2009-04-21 23 views
14

AHORRÉ este script VBScript a mi máquina local como c: \ test.vbs:¿Por qué este VBScript me da un error?

WScript.StdOut.WriteLine "This is a test" 

Cuando lo ejecuto desde la línea de comandos, me sale este error:

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

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

consigo este bajo Windows Vista (SP1) y Windows XP Pro (SP3).

Respuesta

30

Este enlace puede ayudarle a:

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

Parece que el mango StdOut sólo está disponible cuando se utiliza una gran cantidad de consola (cscript.exe) y no una serie de ventanas (wscript.exe). Si desea que el código funcione, debe usar cscript.exe para ejecutarlo.

La publicación también describe cómo cambiar el comportamiento predeterminado para ejecutar scripts con cscript y no con wscript.

6

según lo descrito por el artículo en la respuesta aceptada, mi guión trabajado cuando me llamó desde el símbolo del sistema como éste:

cscript test.vbs 

También puede cambiar el host de scripts por defecto, por lo que una llamada a CSCRIPT no es necesario cada vez. Después de hacer eso, el comando original funciona sin modificaciones.

cscript //h:cscript //s 

Puede restaurar el comportamiento original con:

cscript //h:wscript //s 

Gracias !!

1

Presenté esta solución en el error "cscript - print output on same line on console?" que creo que está relacionado con este problema.

Utilizo la siguiente función de "registro" en mi JavaScript para admitir el entorno wscript o cscript. Como puede ver, esta función escribirá en la salida estándar solo si puede.

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

según este http://stackoverflow.com/questions/4999364/try-catch-end-try-in-vbscript vbscript no tiene try catch. ¿puede establecer una variable según el caso, en vbscript? – barlop

Cuestiones relacionadas