Windows JScript:如何运行外部命令并获得输出?
我正在使用cscript.exe运行JScript文件。 在脚本中,我需要调用外部控制台命令并获得输出 尝试:Windows JScript:如何运行外部命令并获得输出?,windows,cmd,jscript,wsh,Windows,Cmd,Jscript,Wsh,我正在使用cscript.exe运行JScript文件。 在脚本中,我需要调用外部控制台命令并获得输出 尝试: 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("ExitCod
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);
及
但是没有运气:命令运行(很可能)没有错误,但我没有输出。
请注意这里的“cmd/c dir”只是一个示例,以确保我得到任何输出
那么,我该怎么做呢
更新:
我尝试将其转换为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运行时错误:对象不支持此属性或方法,位于var strOutput=oExec.StdOut.ReadAll代码>行
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运行命令并将其标准输出重定向到文件,然后读取该文件
您还可以使用wshscript exec对象并读取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);
在Javascript中,它是对函数的调用,必须包含括号可能重复的@Dariusz,我已经更新了问题。对我来说仍然不起作用。窗口状态对我来说并不重要。我已经更新了这个问题(尝试了stdout),但它仍然是坏的。你能复习一下吗?@Putnik-修改后的答案中有一个例子。
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);
var strOutput = oExec.StdOut.ReadAll();