ごあいさつ
はじめまして、ほげほげおじさんです。
仕事で使ったコマンドだとか備忘録をまとめたいなぁと思っていたところ、このサイトに出会いました。
今回は仕事で初めてVBSを使ってフォルダのローテーションをすることになり、以下に思い出を残したいと思います。
■前提条件
1.フォルダ自体は別プログラムで月ごとに作成される。
2.作業によるフォルダ更新はOK
3.世代管理は必ず作成日付が新しいフォルダを2世代分のこす。
■事前に用意しておくもの
1.設定ファイル(sample.txt)
=====設定ファイルの中身=====
BakFol="E:\Backup"
BakLen=2
GenNum=3
===================
2.作成日付と更新日付を変える魔法
Powershell起動
Set-ItemProperty E:\Backup\01 -Name CreationTime -Value '2017/01/01 00:00:01'
Set-ItemProperty E:\Backup\02 -Name CreationTime -Value '2017/03/01 00:00:01'
Set-ItemProperty E:\Backup\03 -Name CreationTime -Value '2017/05/01 00:00:01'
Set-ItemProperty E:\Backup\04 -Name CreationTime -Value '2016/07/01 00:00:01'
Set-ItemProperty E:\Backup\05 -Name CreationTime -Value '2016/09/01 00:00:01'
Set-ItemProperty E:\Backup\06 -Name CreationTime -Value '2016/11/01 00:00:01'
Set-ItemProperty E:\Backup\test -Name CreationTime -Value '2017/02/01 00:00:01'
Set-ItemProperty E:\Backup\01 -Name LastWriteTime -Value '2017/01/01 01:00:00'
Set-ItemProperty E:\Backup\02 -Name LastWriteTime -Value '2017/03/01 02:00:00'
Set-ItemProperty E:\Backup\03 -Name LastWriteTime -Value '2017/05/01 03:00:00'
Set-ItemProperty E:\Backup\04 -Name LastWriteTime -Value '2016/07/01 04:00:00'
Set-ItemProperty E:\Backup\05 -Name LastWriteTime -Value '2016/09/01 05:00:00'
Set-ItemProperty E:\Backup\06 -Name LastWriteTime -Value '2016/11/01 06:00:00'
Set-ItemProperty E:\Backup\test -Name LastWriteTime -Value '2017/02/01 12:00:00'
■スクリプト(test.vbs)
Option Explicit
Const conCNF = "C:\tmp\sample.txt"
Const adDBTimeStamp = 135
Const adVarWChar = 202
Dim FSO
Dim ADOR
Dim GF
Dim Path
Dim Created
Dim LastModified
Dim SubFolder
Dim BakLen
Dim GenNum
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ADOR = CreateObject("ADODB.Recordset")
ExecuteGlobal FSO.OpenTextFile(conCNF).ReadAll()
Set GF = FSO.GetFolder(BakFol)
ADOR.Fields.Append "Path", adVarWChar, 255
ADOR.Fields.Append "Created" , adDBTimeStamp
ADOR.Fields.Append "LastModified" , adDBTimeStamp
ADOR.Open
'サブフォルダの情報をゲット
For Each SubFolder In GF.Subfolders
If Len(SubFolder.Name) = BakLen Then
ADOR.AddNew
ADOR.Fields("Path").Value = SubFolder
ADOR.Fields("Created" ).Value = SubFolder.DateCreated
ADOR.Fields("LastModified" ).Value = SubFolder.DateLastModified
ADOR.Update
End If
Next
' 作成日時順(昇順)でソート
'ADOR.Sort = "Created ASC, Path"
' 作成日時順(降順)でソート
ADOR.Sort = "Created DESC, Path"
' 更新日時順(昇順)でソート
'ADOR.Sort = "LastModified ASC, Path"
' 更新日時順(降順)でソート
'ADOR.Sort = "LastModified DESC, Path"
' 変数調整
GenNum = GenNum - 1
' 3世代目のバックアップフォルダ(レコード)に進む
'ADOR.MoveFirst
ADOR.Move(intGenNum)
' 3世代目以降のバックアップフォルダを削除
Do Until ADOR.EOF
FSO.DeleteFolder(ADOR.Fields("Path").Value)
If Err.Number <> 0 Then
Wscript.Quit 1
End If
WScript.Echo ADOR.Fields("Path").Value & vbCrLf & _
ADOR.Fields("Created").Value & vbCrLf & _
ADOR.Fields("LastModified").Value
ADOR.MoveNext
Loop
ADOR.Close
On Error Goto 0
Set FSO = Nothing
Set ADOR = Nothing
Set GF = Nothing
WScript.Quit 0
■参考サイト
http://itemy.net/?p=406
http://bayashita.com/p/entry/show/76