他の人がエントリに書いてた仕分けbatが冗長だったのでvbsにした
本当はC#とかでパパッと書いてしまうのが楽だけど、元ネタがバッチファイルなのでWindows標準で動くスクリプトという点でWSHを選びました。*1
PowerShellはローカルで気軽に動かすためにポリシーを変更する必要があるので却下。
Option Explicit Const ForWriting = 2 Const TristateFalse = 0 Dim wsh, fso Set wsh = WScript.CreateObject("WScript.Shell") Set fso = WScript.CreateObject("Scripting.FileSystemObject") wsh.CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName) Dim logfile, folder, file Set logfile = fso.OpenTextFile("imageFiltering.log", ForWriting, True, TristateFalse) Set folder = fso.GetFolder(wsh.CurrentDirectory) For Each file In folder.Files Dim name, index name = file.Name index = InStrRev(name, ".") If index > 0 Then Dim ext ext = Mid(name, index + 1) Select Case LCase(ext) Case "jpg", "jpeg", "gif", "png" Call Move(name) End Select End If Next Function Move(filename) Dim re, ms, m Set re = New RegExp re.Pattern = "モデル\:([^]]+)" Set ms = re.Execute(filename) For Each m In ms Dim matched, models, model matched = m.SubMatches(0) models = Split(matched) For Each model In models If Not fso.FolderExists(model) Then fso.CreateFolder model End If logfile.WriteLine "【" & filename & "】を【" & model & "】フォルダにコピー" fso.CopyFile filename, fso.BuildPath(model, filename) Next logfile.WriteLine "【" & filename & "】を削除" fso.DeleteFile filename Next Set ms = Nothing Set re = Nothing End Function logfile.Close Set logfile = Nothing Set folder = Nothing Set fso = Nothing Set wsh = Nothing
スクリプトをShift-JISで保存しないと正規表現エンジンが正しく動作しません。
あと例外処理とかなにもしてないのでその辺はよしなに。
書いてる途中でいっそファイルのダウンロードも自動化しようかとも思ったけどめんどくさいのでやめました。