LoginSignup
6
14

More than 5 years have passed since last update.

WSHでJScriptとVBScriptを共存させてみる

Last updated at Posted at 2016-06-04

はじめに

私の勤務先は大手SIerなのですが、ほかの同業他社さんに漏れずWindows+Excelで実施する非効率な手仕事が多いです。少しでも効率化するために、自動化できる作業はちまちまとお手製スクリプトを組んでいるので、少しずつ公開していきたいと思います。

日付付きフォルダの作成

日ごとの作業を整理するのに、下記のように {YYYYMMDD 日付}_{作業内容} のフォーマットで日付と作業内容を付けたフォルダを作成することが多々あります。

  • 20160601_hogehoge手順書作成中
  • 20160702_fugafuga作業準備

フォルダを作成し、フォルダを開いて作業を開始するまでに、毎回下記の6ステップがかかるのが面倒になってきたので、WSH(Windows Script Host)を使って自動化してみました。

  • 右クリック
  • 新規作成にマウスオーバー
  • フォルダーをクリック
  • 日付を入力
  • 作業内容を入力
  • 作成したフォルダをダブルクリック

スクリプト全容

当初JScriptだけで実現可能かと思いましたが、JScriptではInputBoxを使用できないため、一部VBScriptの関数を使用することにしました。

JScriptだけであれば、コード書いて hogehoge.jsとして保存すれば動くのですが、JScriptとVBScriptを共存させるには、下記のようにXML形式の WSF(Windows Script File) として記述し、hogehoge.wsf として保存する必要があるようです。

別個のscriptタグで囲んでしまえば、JScript、VBScriptの関数を相互に利用することができます。

createWorkFolder.wsf
<job id="createWorkFolder">

<!-- インプットボックス表示用関数定義 ============================= -->
<script language="VBScript">
  Function vbInputBox(strprompt)
      vbInputBox = InputBox(strprompt)
  End Function
</script>

<!-- スクリプト本体  ============================================ -->
<script language="JScript">

  // 日付に続く文字列を、VBScriptのInputBoxを使用して取得
  var str = vbInputBox("日付に続く文字列を入力してください");
  // 空の場合には、スクリプトを終了
  if( typeof(str) == "undefined" ) {
      WScript.Quit();
  }

  // YYYYMMDD形式の日付を取得
  var today = new Date();
  var yyyymmdd = today.getYear() +format2d(today.getMonth()+1) +format2d(today.getDate());

  // フォルダ名を生成
  var folderName = yyyymmdd +"_" +str;

  // FSOによりフォルダを作成
  var fso = new ActiveXObject("Scripting.FileSystemObject");

  if (!fso.FolderExists(folderName)) {
      // 同名フォルダが存在しなければ、フォルダを作成
      try {
          fso.CreateFolder(folderName);
      } catch (e) {
          WScript.Echo("予期せぬエラーが発生しました");
          WScript.Quit();
      }

  } else {
      // 同名フォルダが存在すれば、メッセージを表示してスクリプト終了
      WScript.Echo("同名フォルダが存在します");
      WScript.Quit();
  }

  // 0.5秒ほど待機(ちょっと待たないと、フォルダがちゃんと開かないらしい)
  WScript.Sleep(500);

  // フォルダをオープン
  new ActiveXObject("Shell.Application").Open(folderName);

  // 数字を0パディングして2桁で返す関数 -------------------------------- 
  function format2d(intValue) {
      if (intValue < 10) {
          return ("0" + intValue);
      } else {
          return (""  + intValue);
      }
  } // -------------------------------------------------------------

</script>
<!-- ========================================================== -->

</job>

使い方

上記コードをコピペして hogehoge.wsf というファイル名で保存し、あとは生成したファイルをダブルクリックをするだけです。

ダブルクリックするとインプットボックスが開くので、日付に続く文字列を入力すれば、スクリプトど同じ場所に新規フォルダが生成され、エクスプローラで開くところまで自動的に動作します。

sample.png

sample2.png

これで6ステップ操作が省略できました!

6
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
14