• ベストアンサー

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

Prome_Linの回答

  • ベストアンサー
  • 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、更新日付は更新されてしまうタイミングで変わってしまいます よろしくお願いいたします。

関連するQ&A

  • ファイルとフォルダの日付変更について

    アルバムを作っているのですがフォルダの名前順や日付順でソートがしたいので任意の日付をフォルダに付けたいのとファイル名やフォルダ名のリストをプリントアウトしたいのですがよろしく。

  • フォルダの日付は変更できる?

    ファイルを整理してフォルダに分類したのですが、 日付順にソートして表示させてた時、 中身の日付と一致していないので、 (フォルダは今作ったら、今日の日付のため) 表示させたい順番になりません(^_^;) フォルダの日付って、任意に変更できないのでしょうか? よろしくお願いします<(_ _)>

    • ベストアンサー
    • Mac
  • 7日間又は7世代前のバックアップフォルダの自動削除

    仕事で使っているソフトのバックアップを毎日取っています。 バックアップ日毎にフォルダ名は自動でYYYYMMDD形式になっています。 そのバックアップフォルダを直近の7日間又は7世代分を残して自動削除したいのですが、 バッチファイルの書き方が分かりません。 どなたかご教示お願い致します。

  • 日付名のディレクトリを世代管理したい

    linuxのコマンドについて教えてください。 あるディレクトリ内で日付のディレクトリを3世代管理しています。 今まではrmで手動削除していたのですが、他のディレクトリでも同様の作業をしたいので、 スクリプトで行おうと考えています。 ただ、ディレクトリ内には様々な名称のフォルダ・ファイルがあり、 上手く日付のディレクトリを取ってこれません。 イメージとしては日付のディクトリだけを取ってきて、ソートし古いのを削除でいけると思うのですが… 詳細は以下です。 同一ディレクトリ内に以下のフォルダがある 20150101 20150103 20150105 20150107 hoge test sample.txt などなど この中で日付のディレクトリの4番目に古いディレクトリを削除したい。 (20150101のディレクトリだけ削除するイメージです) どのようにコマンドを打てばいいか教えていただけますでしょうか? よろしくお願い致します

  • バックアップ(世代管理)機能のバッチファイルを作成したい

    バッチでバックアップファイルを作成したいです。 機能は下記のとおりです。  ・バックアップを毎営業日(平日)とる  ・3世代保存する  ・バックアップ処理成功後、最も古いバックアップを削除する まず、システム日付を取得して、YYYYMMDDフォルダを作成し、その配下に保存したいのです。 でもYYYYMMDDフォルダの作成方法がわかりません。 次に、システム日付より3日以上古い日付を見つけて、該当するものがあったら削除するようにしたいです。 書籍やこのサイトでいろいろ調べているのですが、わからなくて・・・。 このサイトではバッチではシステム日付YYYYMMDDでディレクトリを作成することは出来ない・・・という回答がありましたが、やはり不可能なのでしょうか? ご回答いただきたくよろしくお願いします。

  • シェルスクリプトのバックアップ世代管理について

    シェルスクリプトで質問です。まだ勉強しはじめなのですが、条件がついた時のファイル削除がわかりません。 どなたか教えていただけると助かります。 やりたいことは以下です。 /home/hogeフォルダ内に以下のファイルがあります。 sample20150101 sample20150102 sample20150103 otherXX otherYY otherYYYYMMDD 他にも多数 この中からsampleファイルでファイル名の後ろについている日付が古いものを削除したいです。 ただし、更新日がファイル名の末尾にある日付とは限りません。 またsampleYYYYMMDDは末尾の日付が直近の3ファイル(3日分)は残したいです。 他のファイルには影響ないようにしたいとも考えてます。 ネットで調べて更新日で世代管理はなんとか出来たのですが、ファイル名で判定するやり方がわからず… こういった場合、どのようにスクリプトを書けばいいのでしょうか? まだ勉強しはじめたばかりなので知識がなくて申し訳ないのですが、教えていただけると助かります。 よろしくお願いします。

  • フォルダの表示順が変わって時間がかかるようになった

    PCのフォルダ表示に関して質問させていただきます PC上で録画をよく行うので、それ専用のHDDを準備して 録画データを保存しています 以前まで『日付時刻』の順にデータをソートしていて フォルダを開いたらソートした順番通りにすぐ表示されていたのですが 近頃、開いた直後にまず『名前』順にデータを並べて表示して そこから”日付時刻”順に並べ直す、という表示に代わってしまいました 表示に時間がかかるようになりましたし、何かディスクに 負担をかけてる感がしてスゴく嫌な気持ちになるので 直したいと思っています その手順を教えてもらえないでしょうか? ヨロシクお願いします。

  • 画像が日付けフォルダに保存されなくなった

    PCに取り込んだ画像がフォルダに保存されますが 7月3日以降の画像から 日付け順フォルダに反映されなくなりました フォルダ内部には3日以降に取り込んだ画像は保存されているので 保存自体はできているようですが 日付順に並び替えると7月3日以降の画像は出てこなくなります 設定が変になったのか 壊れてしまったのか 元に戻す方法などがあれば教えてください

  • shuriken2009のフォルダの並び替え

    shuriken2009を使っています。 フォルダを名称順に並び替える方法をご存じないでしょうか。 相手先や目的別に都度フォルダを作り足していった結果、フォルダの並びがばらばらになってしまいました。 右クリックメニューからの「フォルダ移動」のように、一つのフォルダを任意の場所へ移動するのでは無く、サブフォルダすべてをABC順やあいうえお順に並べ直したいのです。 よろしくお願いします。

  • フォルダ内のemlファイルをまとめて見たい

    OSはXPです フォルダ内のemlファイルを現在 1つずつクリックしているのですが OEで見るみたいに↓ボタンを押して次のメールに 移行して見れるような感じで見ていきたいのですが・・ 日付順でソートできたらより良いのですが・・ そういうビューワのようなもの、ないでしょうか?