※備考:今回はVBScriptでバッチを実行したが、文字コードの問題上、出力引数に結果を日本語格納しようとすると文字化けし、これについての解決方法が最後まで不明だった。なお、入力引数に日本語が含まれており、スクリプト内で処理することについては問題なく動作する。出力引数に格納する時点で文字化けが起こるようだ。UTF-8形式のファイルにしたり、ユニコード対応にチェックをいれるなどしても駄目だった。
■指定した親フォルダパスのフォルダ内にあるサブフォルダ名(yyyyMMddHHmmssの日付形式のフォルダ名)
を取得し、指定した日数よりも前の日付の名前のついたサブフォルダを削除する
■バッチファイル(VBScirpt・ANSI形式・拡張子.vbs)
' 文字列を日付形式に変換する関数 Function ConvertToDate(strDate) On Error Resume Next ' エラーハンドリングの開始 Dim year, month, day, hour, minute, second year = Mid(strDate, 1, 4) month = Mid(strDate, 5, 2) day = Mid(strDate, 7, 2) hour = Mid(strDate, 9, 2) minute = Mid(strDate, 11, 2) second = Mid(strDate, 13, 2) ConvertToDate = DateSerial(year, month, day) & " " & TimeSerial(hour, minute, second) If Err.Number <> 0 Then ConvertToDate = "Invalid Date" Err.Clear End If On Error GoTo 0 ' エラーハンドリングの終了 End Function ' 日付が指定された日数より前かどうかを判定する関数 Function IsOlderThan(dateString, days) Dim folderDate folderDate = ConvertToDate(dateString) If folderDate = "Invalid Date" Then IsOlderThan = "Invalid Date" Else IsOlderThan = DateDiff("d", folderDate, Now) > days End If End Function ' サブフォルダを削除するサブルーチン Sub DeleteSubFolder(folderPath) Dim FileSystemObject Set FileSystemObject = CreateObject("Scripting.FileSystemObject") If FileSystemObject.FolderExists(folderPath) Then FileSystemObject.DeleteFolder folderPath End If Set FileSystemObject = Nothing End Sub ' UiPathからの引数を受け取る Dim ParentFolderPath, DaysString ParentFolderPath = WScript.Arguments(0) DaysString = WScript.Arguments(1) ' 文字列型の日数を数値型に変換 Dim Days Days = CInt(DaysString) Dim FileSystemObject, ParentFolder, SubFolder, olderThanResult Dim foldersToDelete Set foldersToDelete = CreateObject("Scripting.Dictionary") Set FileSystemObject = CreateObject("Scripting.FileSystemObject") If FileSystemObject.FolderExists(ParentFolderPath) Then Set ParentFolder = FileSystemObject.GetFolder(ParentFolderPath) For Each SubFolder in ParentFolder.SubFolders olderThanResult = IsOlderThan(SubFolder.Name, Days) If olderThanResult = True Then foldersToDelete.Add SubFolder.Path, SubFolder.Path End If Next ' 削除対象のサブフォルダを削除 Dim folderPathToDelete For Each folderPathToDelete in foldersToDelete.Keys() FileSystemObject.DeleteFolder folderPathToDelete Next WScript.Echo "OK" ' 正常終了 Else WScript.Echo "NG" ' 指定された親フォルダが存在しない場合 End If Set FileSystemObject = Nothing