我将此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)下获得此功能。
答案 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();