• ベストアンサー

フォルダの条件付き世代管理(ローテーション)

VBSの質問です。 ■やりたいこと 1)設定ファイルを読み込んで、バックアップするフォルダの世代数(2世代分)と、フォルダ名を取得する。 2)対象フォルダ内にある任意2文字のサブフォルダがあることを確認し、作成日付でソート(古い順)する。 3)直近の新しい任意2文字のサブフォルダを2世代分を残して、3世代以降は削除する。 VBS自体が初心者でサイトなどで勉強しておりましたが、結局実装できませんでした。 上記につきまして、どのように実装すれば良いかお分かりの方がいらっしゃいましたら、 ご教授いただけますと幸いです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

「設定ファイルを読み込んで」などとありますが、「設定ファイル」の構造が全く分からないので、以下は、一部分のサンプルです。 「フォルダを古い順にソート」して、それをどうするのかもよく分かりませんので、今回はここ(サブフォルダを古い順にソート)までです。 Option Explicit Dim c ,d(), f, gf, n, i, j, so, x Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") c = - 1 For Each f In gf.SubFolders Set n = so.GetFolder(gf & "\" & f.Name) c = c + 1 ReDim Preserve d(c) d(c) = n.DateCreated Next For i = 0 to c - 1 For j = i + 1 to c If d(i) > d(j) Then x = d(i) d(i) = d(j) d(j) = x End If Next Next Set gf = Nothing Set so = Nothing MsgBox("Finished!") できるだけ詳しい説明です。 Option Explicit 「厳密に」とか「明確に」というような意味で、このオプションを設定すると、変数は、その使用の前に「Dim」等によって、宣言しておかなければなりません。 Set so = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしています。 Set gf = so.GetFolder(".") プログラムファイル(「~.vbs」ファイル)が存在するフォルダを取得しています。 c = - 1 カウント用変数の初期化。 For Each f In gf.SubFolders プログラムファイルの存在するフォルダ内のサブフォルダを1つずつ処理。 Set n = so.GetFolder(gf & "\" & f.Name) 見つかったサブフォルダを取得しています。 c = c + 1 1つカウント。 ReDim Preserve d(c) 「ReDim」は、配列変数の「再宣言」です。 したがって、それまであった配列変数は、消えてなくなり、新たに新規作成されるのと同じになります。 しかし今回は「ReDim Preserve」と「Preserve」が付いていますので、それまでの値が保持されます。 すなわち、配列変数の添え字(「()」内の数字)を1つずつ増やしていくような場合に使います。 d(c) = n.DateCreated 新たに見つかったフォルダの「作成日時」を、配列変数に格納しています。 Next を、すべてのフォルダについて繰り返します。 For i = 0 to c - 1 For j = i + 1 to c If d(i) > d(j) Then x = d(i) d(i) = d(j) d(j) = x End If Next Next 「作成日時」を「古い順」に並び替えています。 Set gf = Nothing Set so = Nothing 「Set」で使った変数は、使用後、「Nothing」で、解放しておきます。 MsgBox("Finished!") 最後に、「Finished!」と表示しています。

hitandaway18
質問者

お礼

Prome_Linさん ご回答いただき、有難う御座いました。 また、解説につきましては理解を深めさせていただきます。 (今日は勉強時間が無かった為、明日以降にvbsファイルにして実行してみます。) > 「設定ファイルを読み込んで」などとありますが、「設定ファイル」の構造が全く分からない ⇒大変失礼いたしました。構造は下記となります。 ■設定ファイル(仮にC:\tmp\Environment.conf) intGEN=2  #直近の新しいフォルダを2つ残しておきたいため。 strBAK=C:\Backup #バックアップフォルダパス。 また、バックアップフォルダの中身についても記載漏れしておりました。構造は下記となります。 ■C:\Backup の中身(名前が2文字と5文字のフォルダだけが存在してます。) 04 #作成日付が2016/04/01、更新日付は更新されてしまうタイミングで変わってしまいます。 05 #作成日付が2016/05/01、更新日付は更新されてしまうタイミングで変わってしまいます。 06 #作成日付が2016/06/01、更新日付は更新されてしまうタイミングで変わってしまいます。 ~~~略~~~ 10 #作成日付が2016/10/01、更新日付は更新されてしまうタイミングで変わってしまいます。 11 #作成日付が2016/11/01、更新日付は更新されてしまうタイミングで変わってしまいます。 12 #作成日付が2016/12/01、更新日付は更新されてしまうタイミングで変わってしまいます。 01 #作成日付が2017/01/01、更新日付は更新されてしまうタイミングで変わってしまいます。 02 #作成日付が2017/02/01、更新日付は更新されてしまうタイミングで変わってしまいます。 03 #作成日付が2017/03/01、更新日付は更新されてしまうタイミングで変わってしまいます。 1year #作成日付が2017/01/01、更新日付は更新されてしまうタイミングで変わってしまいます よろしくお願いいたします。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

質問者はシステム管理者ですか。 こういうのは、(営利)業務の一環の中で起こるニーズだと思う。 素人がシコシコ作るような内容や分野ではないと思う。まして無料の質問コーナーに質問して、コードを書いてもらい、コピペして済まそうというのは、そのむつかしさや、複雑さ、テスト検証の確実性などから無理だと思う。  フリーソフトがあるか探して、見つからないなら、市販のソフトを探すべきだと思う。そのためには日ごろからの情報収集(雑誌広告や宣伝郵便物)や相談できる人的ネットを作っておかないとダメだと思う。 少し拡張すると、商用目的のソフトにもなりそうな内容のものを、無料で提供せよと言っているように思えるので無理があると思う。 ーー 第何世代という判別は、質問者が思っている内容(用語)では、文章で書けばどういう内容になるのか。

hitandaway18
質問者

お礼

imogasiさん ご回答ありがとうございます。インラインにて失礼いたします。 > 質問者はシステム管理者ですか。 ⇒システム管理者ではなく、ヘルプサポートになります。 質問させていただいた経緯につきまして、現場で社内システムのとあるフォルダを作成日付でソートし、直近の新しい日付フォルダを削除できないか?という相談があったためです。 こういうのは、(営利)業務の一環の中で起こるニーズだと思う。 素人がシコシコ作るような内容や分野ではないと思う。まして無料の質問コーナーに質問して、コードを書いてもらい、コピペして済まそうというのは、そのむつかしさや、複雑さ、テスト検証の確実性などから無理だと思う。  フリーソフトがあるか探して、見つからないなら、市販のソフトを探すべきだと思う。そのためには日ごろからの情報収集(雑誌広告や宣伝郵便物)や相談できる人的ネットを作っておかないとダメだと思う。 ⇒おっしゃる通りです。 質問内容がざっくりで、且つ、不快に思われてしまう質問をしてしまい、申し訳ありませんでした。

関連するQ&A