あさりのみそしるダイアリー

非常事態が日常です…そんな時こそ声を上げないと人生ジエンドにゃん(´・ω・`)

FileWatcherManager Ver.1.03aをリリースしました!

先日公開した「FileWatcherManager」に機能追加と不具合修正をしました。

ちなみに「FileWatcherManager」は、指定したフォルダを監視して、変更があれば指定したコマンドを実行します。
フォルダの指定などは、すべて専用のスクリプトで行います。


○ FileWatcherManager Ver.1.00bをリリースしました! ( ソフトウェア ) - あさりのみそしるダイアリー - Yahoo!ブログ


変更内容は以下のとおり。

[1.03a (2017/08/16)]
・機能追加
- FileWatcher(グループ)の設定に"reverse-filelist","filewatcher-enabled"を追加
- コマンドに"start-filewatcher","stop-filewatcher"を追加
- マクロに"replace_str","current_datetime","fw_name","file_contains"を追加

・不具合修正
- 条件がfalseの場合に、以降の条件判定を実行しないようにしました
- パラメータ付きマクロが正しく動作しないのを修正 



今回追加されたマクロなどは、以下のとおり。


・グループの設定
  グループ(FileWatcher)の詳細設定を行います。

  reverse-filelist (true or false)
    検出したファイルのリストの並びを逆にします。

    設定:
      true
        ファイルリストの並びを逆順に変更します。
      false(デフォルト)
        ファイルリストの並びを変更しません。

    書式:
      set reverse-filelist true

  filewatcher-enabled (true or false)
    FileWatcherを実行時点で有効または無効に設定します。
    無効にした場合、manual-scanを実行しても、無効のFileWatcherは実行されません。

    設定:
      true(デフォルト)
        FileWatcherを有効にします。
      false
        FileWatcherを無効にします。

    書式:
      set filewatcher-enabled true


・コマンド
  各ファイルに対して実行するコマンドです。
  doコマンドは、1つのグループに複数設定できます。
  1つのdoコマンド内に、複数のコマンドを含む場合は、最初に指定したコマンドから順に実行されます。
  複数のdoコマンドを含む場合は、最初のdoコマンドについて、これに含まれるコマンドから順に実行されます。
  
  do (コマンドの種類)
    指定したコマンドの種類から、コマンドを指定します。
    コマンドは、基本構文のとおり、次の行から列挙します。

    コマンドの種類:
      start-filewatcher
        指定した名前のFileWatcherを実行(有効化)します。
      stop-filewatcher
        指定した名前のFileWatcherを停止(無効化)します。
        ただし、すでに実行中のプロセスは、完了するまで続行されます。

    書式:
      do start-filewatcher
        # FileWatcher名
        test
      do stop-filewatcher
        # FileWatcher名
        test


・マクロ
  条件やコマンドの指定には、マクロを使用できます。
  マクロを使うことで、より多様な条件の評価やコマンドの実行を行うことができます。
  ※ただし、一部条件下を除き、use-macroがfalseのとき、マクロは実行されません。
  
  マクロは、行中の文字列の置換機能です。
  決まった書式で書かれた文字列を、ファイル名や数値などと置き換えます。

  マクロは、マクロ名の両側を「$」で囲って使用します。
  使用可能なマクロは、以下のとおり。

  file_contains
    ファイルの中身に指定した文字列が含まれるかどうかの評価結果と置き換えます。
    ファイルはShift-JISエンコードで開かれます。テキストファイルのみ対応します。
    書式:
      $file_contains(評価文字列)$
    結果:
      評価対象ファイルがShift-JISテキストファイルで、かつファイルの中身が「テスト」のとき
      $file_contains(スト)$  の場合、「スト」はファイルに含まるため
      true
      $filename_contains(テト)$  の場合、「テト」はファイルに含まれないため
      false

  current_datetime
    現在の日時と置き換えます。
  書式:
    $current_datetime$
  結果:
    現在の日時が2017年8月15日 0時15分30秒のとき
    2017/08/15 0:15:30

  fw_name
    FileWatcher名と置き換えます。
  書式:
    $fw_name$
  結果:
    FileWatcher名(group名)が「sample」のとき
    sample

  replace_str
    指定した文字列の内容を、指定した文字列で置き換えます。
  書式:
    $replace_str(置換対象文字列,置換前文字列,置換後文字列)$
  結果:
    $replace_str(あいうえお,うえ,ウエ)$ とし、「あいうえお」の「うえ」を「ウエ」に置き換えるとき
    あいウエお





今回の変更により、特定の条件を満たしたとき、新たなFileWatcherを実行(起動)したり、あるいは停止したりすることができます。

また、判定する条件が多いとき、1つでも条件を満たさない場合であっても、各ファイルについてすべての条件を判定していましたが、条件を満たさない時点で以降の条件は判定しないようにしました。これにより、条件が多い場合の1ファイルあたりの処理時間が短くなりました。

そのほか、スクリプト中における文字列置換や、ファイルに特定の文字列が含まれるかどうかの判定ができるようになったため、より応用の利くフォルダ監視ができるかと思います。

パラメータ付きマクロ(「()」の中に値を指定するタイプのマクロ)が正しく実行されていないことに気づきました。今までいくつも実装しておいて、そりゃないわ・・・ですよね。
なので、パラメータ付きマクロは実質今回のバージョンからすべて実装みたいな感じになりますね。中で例外が発生していましたよ、いろいろミスってた・・・。


今回追加した機能は、自分が使いそうだから実装しただけなんですけどね。

ただ、ちょっと動作に問題のありそうな部分があるかも?
たぶん、初期バージョンからずっとあるんだろうけど、判明次第、修正するつもりです。




おわり。