- ベストアンサー
バックアップ(世代管理)機能のバッチファイルを作成したい
バッチでバックアップファイルを作成したいです。 機能は下記のとおりです。 ・バックアップを毎営業日(平日)とる ・3世代保存する ・バックアップ処理成功後、最も古いバックアップを削除する まず、システム日付を取得して、YYYYMMDDフォルダを作成し、その配下に保存したいのです。 でもYYYYMMDDフォルダの作成方法がわかりません。 次に、システム日付より3日以上古い日付を見つけて、該当するものがあったら削除するようにしたいです。 書籍やこのサイトでいろいろ調べているのですが、わからなくて・・・。 このサイトではバッチではシステム日付YYYYMMDDでディレクトリを作成することは出来ない・・・という回答がありましたが、やはり不可能なのでしょうか? ご回答いただきたくよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
バッチを組んでいたのははるか昔のことになってしまいましたが.... 単に世代管理するだけなら、日付でフォルダを作らなくてもいいんじゃないですか?。 「3日前」「2日前」「1日前」とか固定のフォルダを作っておいて、バッチを実行されるたびに3←2,2←1,1←今日のデータとコピーしていけば事足りるんじゃないかと考えますが、どうしても日付の名前のフォルダで管理しなきゃいけない奥深い理由があるんでしょうか?。 ファイルの日付はタイムスタンプ見ればわかるし....。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
#2の方が書かれているように日付名のファイルやフォルダを作るのは簡単です。が、3日以上前のを消すって、書き間違いですよね?連休明けには全部消えちゃいますけど。3世代の一番古いのを消すと言うことだと思います。 #1の方が書かれているように1,2,3というフォルダ名がかえってわかりやすくていいんじゃないですか? move \bkup\3 \bkup\4 move \bkup\2 \bkup\3 move \bkup\1 \bkup\2 md \bkup\1 xcopy 好みのオプション コピー元 \bkup\1 if %ERRORLEVEL%==0 rd /s /q \bkup\4 どうしても日付でフォルダを作るなら、複雑になります。 setlocal for /f "tokens=1-3 delims=/ " %%A in ('date/t') do set YYYYMMDD=%%A%%B%%C md \bkup\%YYYYMMDD% xcopy 好みのオプション コピー元 \bkup\%YYYYMMDD% if %ERRORLEVEL%==0 for /f %%D in ('dir /b /ad \bkup\') do rd /s /q \bkup\%%D & goto :eof 最後の文では、dir /b /ad \bkup で最初に表示されるフォルダを消します。日付フォルダしかない前提で一番古い日付のもの。あらかじめ3日分の(空)フォルダを作っておかないといけません。さもないとコピーした直後にそれが消えます。
お礼
ご回答ありがとうございます。 日付フォルダが作成可能だということがわかりました。 でも、作りが複雑になるので、最初の回答者の方のアドバイスどおり固定フォルダ方式を使うことにしました。 「3日以上前のを消す・・・」は間違いですね。土日や長期休暇の事の場合を考慮していなかった・・・。失礼しました。 バッチを稼動して、Todayバックアップが成功したら、最も古いバックアップを削除したかったのです。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
そんなことはないですよ。 http://www.okweb.jp/kotaeru.php3?q=462543
お礼
ご回答ありがとうございます。 教えていただいたページのサンプルを試してみたところ、簡単に日付フォルダが出来ました。 実現可能だということがわかってよかったです。 ありがとうございます。
お礼
ご回答ありがとうございます! WillDesignWorksさんのアドバイスを元にバッチファイルを作って見たら上手く出来ました! 今まで手動で日付フォルダにバックアップをとっていたので、「手動の処理をそのまんま自動化する」ことにとらわれ過ぎていました。 固定ファイルも考えたのですが、バッチ稼動ごとにバックアップを移動していく「3←2,2←1,1←今日のデータ」ということは思いつきませんでした・・・。 とても助かりました。感謝です。