我正在使用 cscript.exe 运行 JScript 文件。
在脚本中我需要调用外部console命令并获取输出。
Tried:
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);
and
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”只是示例,以确保我获得任何输出。
那么,我应该怎么做呢?
Update:我尝试转换这个https://stackoverflow.com/a/6073170/1013183 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
at var strOutput = oExec.StdOut.ReadAll;
line
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)