1.スクリプト処理構成
2.スクリプト実行方法
3.想定ファイル
4.スクリプト詳細
5.完成コード

1.スクリプト処理構成

 スクリプトの主な流れとしては下記の通りです。
 1.指定フォルダのファイルを読み込む
 2.ファイル名を判定し、指定のフォルダにコピー
 3.コピー元のファイルを削除
 4.2~3をすべてのファイルについて行う

2.スクリプト実行方法

 スクリプトファイルを実行

3.想定ファイル構成

 今回指定したのは、デスクトップのtestフォルダ内のファイルです。
 すべてのファイルが、R_もしくはL_ではじまるファイル名です。

4.スクリプト詳細

 1)特殊フォルダを指定します
 WScript.ShellオブジェクトのSpecialFoldersに引数で特殊フォルダを指定します。

今回はデスクトップのtestフォルダを指定したので、↓のとおりになります。

特殊フォルダに引数に指定できるものは、実際にやったことあるものだけ上げると下記表の通りです。

特殊フォルダ引数
パブリックデスクトップ0
パブリックスタートメニュー1
デスクトップ4
スタートメニュー11
ドキュメント16

ちょっと脱線
↑のコードで"" +でフォルダパスの前後を挟んでいたことにお気づきでしょうか。
これは、スクリプトの終端を明示するためにつかっています。
デスクトップですから、当然
C:Users\<UserName>\Desktop
というパスになるわけですが、
<UserName>にスペースが入っていると、コンストラクタが終端を見失うため、エラーになってしまいます。
興味があれば、試しに↓のコードに置き換えて実行してみてください。

スペースが入って、終端を見失う可能性がある場所には、""で囲むと少し安心してコーディングできると思います。
さて、話を戻して

 2)ターゲットフォルダ内のファイルを取得します

 ファイルシステムオブジェクトを作成して、GetFolderでフォルダを取得し、Filesプロパティでターゲットフォルダ内のすべてのファイルを取得して、変数に格納します。
書式は↓のような感じです。

実際に使ったコードがこちら。

 3)分別先のフォルダを作成

 4)ファイル名を判定して、フォルダ分けする

 さて、今回のスクリプトの本丸。ファイル名を判別して、フォルダ分けするコードです。
 2)で取得した、フォルダ内のファイルをFor Each文で1ファイルずつ取り出して判定していきます。

今回の判定基準はファイル名にR_もしくはL_があるかです。ファイル名に含んでいればいいので、(緩い。。。)

instrという関数を使います。検索文字があれば、1文字目に見つかれば、1を返します。ない場合は、0を返します。
今回は含んでいるだけでいいので、>0 で指定しました。
参考までに、ファイル名の先頭にあるかを判定する場合は、↓のような感じで、1番目にあるかを判定すればいいです。

今回実際に実装したコードは↓の通り。
 For Each でoflsからファイルパスを1つ出して、
 R_を含んでいるか判定して、合致しなければ
 L_を含んでいるか判定します。今回サンプルに用意したファイルは、R_もL_も両方含んでいるファイルはありませんが、両方含んでいる場合、このままではR_が入るフォルダに格納されてしまうので、注意です。

今回は実装しませんでしたが、↓のような条件分岐で行ってもいいと思います。というか、こっちのほうがスマート。。。

いろいろ脱線しましたが、今回の処理はこのような感じです。

5.完成コード 

本日もPROGFRONTIREをご覧いただきありがとうございました。
明日が、あなたにとってなりたい自分に近づける日でありますように。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です