A Better Project@はてなダイアリー(インポート版)

基本的にここは更新されません。詳細はaboutへ。

WSH の WshShell.Exec メソッドで得た標準出力の内容(StdOut)から最後の改行を削除するには、String.substring メソッドを使う

昨日のスクリプトで上手くいかなかった件が解決しました。最後の改行を取り除けば良いのだろうなというところまではわかっていたのですが、それがなかなか上手く行かず。http://www.kipwmi.com/fmbbs/wwwlng.cgi?print+200405/04050080.txt を参考に、substring メソッドによる位置指定で取り除くという方法で上手くいきました。
以下、昨日のスクリプトの完全版。

//usage: %0 .extension
var WshShell = WScript.CreateObject("WScript.Shell");
var myExt = WScript.Arguments(0);
var myExecAssoc = WshShell.Exec("cmd /c assoc " + myExt);
var myOutAssoc = myExecAssoc.StdOut.ReadAll();
var myFtype = myOutAssoc.split("=")[1];
var myExecFtype = WshShell.Exec("cmd /c ftype " + myFtype);
var myOutFtype = myExecFtype.StdOut.ReadAll();
if (myOutFtype==""){
    var myCleanedFtype = myFtype.substring(0, myFtype.length-2);
    var myRegKey = "HKEY_CLASSES_ROOT\\" + myCleanedFtype + "\\Shell\\Open\\Command\\";
    myOutFtype = myCleanedFtype + "=" + WshShell.RegRead(myRegKey);
}
WScript.Echo(myOutFtype);

以下、上手く行かなかった方法を列挙。

  • 標準出力の内容を "\n" で split した配列にして、0 番目を取りだそうと試みる。
  • 正規表現パターン /.+/ で 標準出力の内容から改行以外の部分を取りだそうと試みる(RegExp.exec メソッド)。