WSHでプログラムを実行する際のコンソールウィンドウを非表示に
WSHでプログラムを実行して出力を受け取って
処理するものを考えていたのですが、
コンソールウィンドウがいちいち出てくるのが非常にうざったいので
非表示にする方法を検索。
WScript.ShellのExec()でコンソールアプリを非表示で実行する。
ドラッグ&ドロップされたファイルにまとめて何かする。
1番目はVBScript、2番目はJavaScript。
私にはJavaScriptのほうが少しだけとっつきやすいですが、
2番目をmodifyしてみてもなぜか表示されます。
(やり方に問題があるのでしょうけど)
結局、「Runのところで0にしないと非表示にならない」というだけ、
なんじゃないかと試したらとりあえず動作。
下がそのサンプル。
<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<package>
<job>
<?job error="True" debug="False" ?>
<script language="jscript">
// コンソールを非表示に(ここで「job id="SvnList"」を実行、非表示の対象とする)
var args = ['CScript.exe //job:exec', '"' + WScript.ScriptFullName + '"'];
for (var arg = new Enumerator(WScript.Arguments); !arg.atEnd(); arg.moveNext()) {
args.push('"' + arg.item() + '"');
}
var shell = new ActiveXObject('WScript.Shell');
shell.Run(args.join(' '), 0, true);//->0で非表示
WScript.Quit(0);
</script>
</job><job id="exec">
<?job error="True" debug="True" ?>
<object id="objFs" progid="Scripting.FileSystemObject" />
<script language="jscript">
<![CDATA[//svn listを実行してみる
var str1 = exe1("\"C:\\Program Files\\TortoiseSVN\\bin\\svn.exe\" list -v \"file:///D:/rep/test/trunk\"")
//WScript.Echo(str1);
var current_dir = objFs.GetParentFolderName(WScript.ScriptFullName);
//WScript.Echo(current_dir);
var path = current_dir + "\\svn.txt";
filewrite1(path,str1);
//WScript.Echo(path);function filewrite1(path,str)
{
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
if(!objFs.FileExists(path))
{
objFileSys.CreateTextFile(path);
}
var objOutFile = objFileSys.OpenTextFile(path ,2);//2は書き込み(上書き)
var splitstr = str.split("\n");
var i;
for(i=0;i<splitstr.length;i++)
{
objOutFile.WriteLine(splitstr[i]);
}
objOutFile.Close();
objOutFile = null;
objFileSys = null;
}
function exe1(cmd_path)
{
var shell = new ActiveXObject("WScript.Shell");
var exec = shell.Exec(cmd_path);
var out = '';
while (!exec.StdOut.AtEndOfStream)
{
out += exec.StdOut.ReadLine() + "\n";
}
exec = null;
shell = null;
return(out);
}]]>
</script>
</job>
</package>
ただ、Echoのコメントアウトをはずしてもメッセージが出ないのは、
そういうものなのでしょうか。
最初の<job>~</job>をはずせばもちろん表示されますけど。
→わかりました。Echoもコマンドプロンプトのほうに出力されているからですね。
| 固定リンク
| コメント (0)
| トラックバック (0)