为什么这个VBScript会给我一个错误?

时间:2009-04-21 19:58:18

标签: vbscript

我将此VBScript脚本保存到本地计算机上,格式为c:\ test.vbs:

WScript.StdOut.WriteLine "This is a test"

当我从命令行运行它时,我收到此错误:

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

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

我在Windows Vista(SP1)和Windows XP Pro(SP3)下获得此功能。

3 个答案:

答案 0 :(得分:34)

此链接可以帮助您:

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

句柄StdOut似乎仅在使用控制台主机(cscript.exe)而非窗口主机(wscript.exe)时可用。如果您希望代码有效,则必须使用cscript.exe来运行它。

该帖子还描述了如何更改默认行为以使用cscript而不是wscript运行脚本。

答案 1 :(得分:8)

正如接受的答案中的文章所描述的那样,当我从命令提示符调用它时,我的脚本工作正常:

cscript test.vbs

您还可以更改默认脚本主机,以便每次都不需要调用cscript。执行此操作后,原始命令无需修改。

cscript //h:cscript //s 

您可以使用以下命令恢复原始行为:

cscript //h:wscript //s 

谢谢!

答案 2 :(得分:1)

我在错误“cscript - print output on same line on console?”中提交了此解决方案,我觉得这与此问题有关。

我在JavaScript中使用以下“log”函数来支持wscript或cscript环境。正如您所看到的,此函数只有在可以的情况下才会写入标准输出。

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();