更新日付を確認してファイルを移動する

Avatar
dstn

はじめに

ファイルサーバの中に更新されないまま残っている古いファイルをバックアップ領域に移動したいというケースはよくあるのではないでしょうか。そんなときはファイルカテゴリにある『ファイル操作』コンポーネントが活用できます。

今回作成する移動処理は以下の条件で作成してみようと思います。

  • 移動対象:処理実行日より2ヶ月前のもの
  • 処理要件:圧縮して対象のフォルダへ移動する

完成イメージ


このような処理で構成します。

  1. ファイル名の一覧を取得
  2. 移動の対象となるファイルを抽出
  3. 繰り返し以下の処理を行う
    1. 対象となったファイル名を1件取得
    2. 対象ファイルを移動して圧縮
    3. 対象の元ファイルを削除

その他、ポイントとなる点をいくつか上げてみたいと思います。

対象ファイルの抽出ロジック:mapping

最初のマッピングでは対象となるファイル名を取得しています。

現在日時から「月を増減」コンポーネントを利用し2ヶ月分引き、「ファイル名一覧取得」で得られた更新日付を「以前ロジック」を使って比較すると、対象となるファイルの名称だけが出力先に渡されることになります。

マッピングを使った中間データの保持:mapping

対象となるファイル一覧をcsvファイルに書き込み、後続で利用するという方法もありますが、今回はMapperを使った方法で作成しています。

「ファイル名一覧取得」から「マッピング」にプロセスフローとデータフローの両方を引き、マッピング画面を開くと出力先に何も表示されていないので、出力先の「出力先データ」上で右クリックし、「仮スキーマを設定」するか「スキーマの読み込み」いずれかの方法でスキーマを作成します。

 

スキーマ作成後

分割パスの設定:foreach

取得したファイル名一覧を「繰り返し(データ件数)」を使って全件処理するためには分割パスを設定する必要があります。

 

foreachコンポーネントの「XMLデータ処理」タブの「分割パス」に、仮スキーマで作成した値、今回は「/root/row」を設定します。入力データがXML型の場合、設定する必要があるので注意が必要です。

 

ファイル名の取得と設定:mapping(1)

foreachの中では繰り返しファイル名を取得し、事前に用意しておいたスクリプト変数に格納しながら後続の処理へのつなげていきます。

「${ スクリプト変数名 }」となっているところにファイル名が設定されます。

テストデータの作成

今回の処理はファイルの「更新日付」を参照し、バックアップ対象を選定していました。ということはテスト時に複数パターンの更新日付をもったファイルを用意する必要があります。過去のファイルを探してもよいですが、それは面倒なのでPowerShellをつかって更新日付を変更してみたいと思います。

PowerShellを起動し、「Set-ItemProperty」を利用します。オプションに「-Name」に更新日付なので「LastWriteTime」を設定し、「-Value」には指定したい日付を「YYYY/MM/DD hh:mm:ss」のフォーマットで指定します。あとは実行するだけ。

指定した値に日付が更新されています。

最後に

処理の中間データをファイルで対応するのではなく、マッパーを利用することで余計なファイルI/O処理が発生せず、全体としてすっきりとした作りになります。しかし、マッパーはXML型のコンポーネントなので、後続の繰り返し処理においてCSVやExcel等のテーブルモデル型のコンポーネントでは設定する必要がなかった「分割パス」の設定が必要になりますので、もし線をつないでも何も表示されないときはコンポーネントのデータモデル(ヘルプに記載されています。)と「分割パス」の設定を確認するようにしてみてください。

コメント

ログインしてコメントを残してください。

Powered by Zendesk