LoginSignup
0
0

More than 5 years have passed since last update.

VBSの日付順ソートと世代管理

Last updated at Posted at 2017-07-23

ごあいさつ

はじめまして、ほげほげおじさんです。
仕事で使ったコマンドだとか備忘録をまとめたいなぁと思っていたところ、このサイトに出会いました。

今回は仕事で初めて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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0