我正在使用cscript.exe运行我的JScript文件。 在脚本中,我需要调用外部 console 命令并获取输出。
尝试:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c dir');
WScript.Echo("Status "+oExec.Status);
WScript.Echo("ProcessID "+oExec.ProcessID);
WScript.Echo("ExitCode "+oExec.ExitCode);
和
var oShell = WScript.CreateObject("WScript.Shell");
var ret = oShell.Run('cmd /c dir', 1 /* SW_SHOWNORMAL */, true /* bWaitOnReturn */);
WScript.Echo("ret " + ret);
但没有运气:命令运行(最有可能)没有错误,但我没有输出。 请注意'cmd / c dir'这里只是一个示例,以确保我得到任何输出。
那么,我该怎么做呢?
更新 我试图将此https://stackoverflow.com/a/6073170/1013183转换为JScript,但也没有运气:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c dir');
var strOutput = oExec.StdOut.ReadAll;
WScript.Echo("StdOut "+strOutput);
var strOutput = oExec.StdErr.ReadAll;
WScript.Echo("StdErr "+strOutput);
错误为Microsoft JScript runtime error: Object doesn't support this property or method
行var strOutput = oExec.StdOut.ReadAll;
答案 0 :(得分:4)
var oShell = WScript.CreateObject("WScript.Shell");
var ret = oShell.Run('cmd /c dir', 1 /* SW_SHOWNORMAL */, true /* bWaitOnReturn */);
WScript.Echo("ret " + ret);
将命令的退出代码分配给ret变量,而不是其标准输出。
要读取命令的标准输出,可以使用cmd / c运行命令并将其标准输出重定向到文件,然后读取文件。
您也可以使用WshScriptExec对象并读取StdOut属性,但是如果您使用该对象,则无法像使用WshShell.Run一样控制窗口状态(如上所述)。
以下是一个示例脚本:
function runCommand(command) {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var wshShell = new ActiveXObject("WScript.Shell");
do {
var tempName = fso.BuildPath(fso.GetSpecialFolder(2), fso.GetTempName());
} while ( fso.FileExists(tempName) );
var cmdLine = fso.BuildPath(fso.GetSpecialFolder(1), "cmd.exe") + ' /C ' + command + ' > "' + tempName + '"';
wshShell.Run(cmdLine, 0, true);
var result = "";
try {
var ts = fso.OpenTextFile(tempName, 1, false);
result = ts.ReadAll();
ts.Close();
}
catch(err) {
}
if ( fso.FileExists(tempName) )
fso.DeleteFile(tempName);
return result;
}
var output = runCommand("dir");
WScript.Echo(output);
答案 1 :(得分:0)
var strOutput = oExec.StdOut.ReadAll();
在Javascript中,它是对函数的调用,必须包含括号