Почему этот VBScript дает мне ошибку?
Я сохранил этот VBScript script на моем локальном компьютере как 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).
Ответы
Ответ 1
Эта ссылка может вам помочь:
http://www.tech-archive.net/Archive/Scripting/microsoft.public.scripting.vbscript/2004-07/0979.html
Похоже, что дескриптор StdOut
доступен только при использовании хоста консоли (cscript.exe
), а не в оконном хосте (wscript.exe
). Если вы хотите, чтобы код работал, вы должны использовать cscript.exe
для его запуска.
Сообщение также описывает, как изменить поведение по умолчанию для запуска скриптов с помощью cscript, а не wscript.
Ответ 2
Как описано в принятом ответе, мой script работал, когда я вызывал его из командной строки следующим образом:
cscript test.vbs
Вы также можете изменить хост по умолчанию script, так что вызов cscript не требуется каждый раз. После этого исходная команда работает без изменений.
cscript //h:cscript //s
Восстановить исходное поведение можно с помощью:
cscript //h:wscript //s
Спасибо!!
Ответ 3
Я отправил это решение в сообщение об ошибке cscript - вывод на печать в той же строке на консоли?, который, как мне кажется, связан с этой проблемой.
Я использую следующую функцию "log" в своем JavaScript для поддержки среды 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();