UiPath 目次 - ray88’s diary
※備考:今回は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
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
■Uipath側の設定
※Invoke VBScript アクティビティは入力引数も出力引数も文字型