
あるフォルダ(C:\test\)内のフォルダ名が日付形式(YYYYMMDD)のものの中で、
一番新しい日付のフォルダを残し、古い日付のフォルダを削除したいです。
日付が新しいか古いかは、フォルダ名で判断。作成日時で判断するのではない。
C:\test\フォルダには、日付形式(YYYYMMDD)のフォルダとそれ以外の名称のフォルダ、ファイルが含まれます。
例ですが、C:\test\フォルダに以下のフォルダ・ファイルがあるとして、
C:\test\AbcD1\
C:\test\20130601\
C:\test\20130611\
C:\test\Aiueo2\
C:\test\aa2.log
C:\test\20130602\
C:\test\20130605\
C:\test\20130614\
C:\test\Zxy2\
C:\test\aaa.txt
削除するのは、
C:\test\20130601\
C:\test\20130611\
C:\test\20130602\
C:\test\20130605\
です。
以下のフォルダについては、フォルダ名が日付形式(YYYYMMDD)ではないので、
削除しません。
C:\test\AbcD1\
C:\test\Aiueo2\
C:\test\Zxy2\
以下のフォルダについては、フォルダ名の日付が最新のため、
削除しません。
C:\test\20130614\
ファイルについては、削除しません。
C:\test\aa2.log
C:\test\aaa.txt
フォルダの一覧を取得するvbsは作成できました。
ですのであとは、
1.日付形式のフォルダを取得
2.最新の日付形式のフォルダ名を取得する
3.最新以外の日付フォルダを削除する
部分ができれば、できそうです。
サンプルソースや参考サイトを教えてください。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
日付値としての判断は 「フォルダー名が 8文字であり、なおかつ IsDate で日付値として評価できる」 という条件にした。
DateSerial で日付書式を作成すると 20130631 も 2013年7月1日になってしまうため手動で日付書式を生成した。
これにより 20130631 は "日付値ではない" と判断する。
フォルダーの一覧取得や削除は FileSystemObject を使用した。
日付値どうしの大小比較を行うため、フォルダー名を ADODB Recordset オブジェクトに格納し、Recordset のソート メソッドを使用した。
' 日付形式のフォルダー名を格納する ADODB Recordset
Dim rs
Set rs = CreateObject("ADODB.Recordset")
Call rs.Fields.Append("FolderName", 3) ' フォルダー名 (数値)
Call rs.Fields.Append("FolderSpec", 130, 1000) ' フルパス 文字列 1000文字
Call rs.Open()
' 名前が 8文字で、日付値として評価できるフォルダーを Recoreset に取り込む
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
For Each f In fso.GetFolder("D:\test").SubFolders
If Len(f.Name) = 8 Then
If IsDate(Left(f.Name, 4) & "/" & Mid(f.Name, 5, 2) & "/" & Mid(f.Name, 7, 2)) Then
Call rs.AddNew()
rs.Fields("FolderName").Value = f.Name
rs.Fields("FolderSpec").Value = f.Path
Call rs.Update()
End If
End If
Next
' 一番大きな日付値が先頭に来るように降順でソートする
rs.Sort = "FolderName DESC"
' 候補フォルダーが 2個以上あれば 2個目以降のフォルダーを削除する
If rs.RecordCount >= 2 Then
Call rs.Move(1) ' 2個目のレコードに進む
Do Until rs.EOF
fso.DeleteFolder(rs.Fields("FolderSpec").Value)
rs.MoveNext
Loop
End If
Call rs.Close()
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Windows 10 ネットワークプリンターにファイルを直接送る方法・コマンドないですか?(´・ω・`) 3 2023/03/13 23:15
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA フォルダの複数選択ができない
-
会社のネットワーク上のファイ...
-
【マクロ】ファイル名の日付に...
-
ファイル名と同名のフォルダを...
-
Windows10でコマンドプロンプト...
-
フォルダ内のPDFファイル名を変...
-
デスクトップの画像をhtmlに表...
-
VB.NRT FolderBrowserDialogを...
-
Debug フォルダは消していいの?
-
エクセルのマクロについて教え...
-
保存先のフォルダ名を指定した...
-
バックアップ(世代管理)機能...
-
フォルダAから1つのファイルだ...
-
META-INFフォルダの置き場所に...
-
ThisWorkbookがあるフォルダ更...
-
ファイル名に特定の文字列を含...
-
VBA 複数ファイルのシートを1...
-
msgファイルを扱いたい
-
条件に合うフォルダが存在する...
-
VBA:特定の文字を含むフォルダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
会社のネットワーク上のファイ...
-
パス名に2バイト文字(マルチバ...
-
デスクトップの画像をhtmlに表...
-
【マクロ】ファイル名の日付に...
-
C ファイル出力で、フォルダが...
-
ファイル名と同名のフォルダを...
-
Excelのハイパーリンクについて...
-
VBA 最新のフォルダ取得
-
Excelで指定したフォルダに保存...
-
VBAでファイル名を指定して保存...
-
Access VBA で フォルダ権限...
-
サーバ内のフォルダ名と各フォ...
-
excelマクロ 冒頭3文字が一致す...
-
VBA フォルダ名に特定の文字を...
-
カレントフォルダって?
-
Excel VBA マクロ フォルダ名を...
-
VBA フォルダの複数選択ができない
-
ExcelVBAでフォルダへのハイパ...
-
ExcelのVBAでフォルダ指定がで...
おすすめ情報