現在、古いバックアップデータが入ったフォルダを削除する「ローテート処理」を作成しようとしています。
削除する際に基準とするのは最終更新時の日付ではなく、
"フォルダ名に書かれている日付" です。
削除するバックアップデータは以下のようなフォルダ名をしています。
TEST_BACKUP_20200209
TEST_BACKUP_20200210
TEST_BACKUP_20200211
TEST_BACKUP_20200212
TEST_BACKUP_20200213
TEST_BACKUP_20200209000001
TEST_BACKUP_20200210000003
TEST_BACKUP_20200211000002
TEST_BACKUP_20200212000002
TEST_BACKUP_20200213000001
時刻の付いているタイプと付いていないタイプがあります。
また、同じ階層にその他ファイルやフォルダも存在します。
参考にしているページは以下のところ
https://oshiete.goo.ne.jp/qa/1106294.html
https://code-base.jp/%E3%83%90%E3%83%83%E3%83%81%E3%81%A7n%E6%97%A5%E4%BB%A5%E5%89%8D%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E5%89%8A%E9%99%A4/
組んだ処理が以下の内容です。
echo WScript.Echo DateAdd("d",-3,Date) > tmp.vbs for /f "delims=/ tokens=1-3" %%A in ('cscript //nologo tmp.vbs') do set OLD=TEST_BACKUP_%%A%%B%%C del tmp.vbs for /d %%D in (TEST_BACKUP_????????*) do if %%D LSS %OLD% rd /s /q %%D
3日前の日付を取得するvbsを作成、
vbsで取得した日付を[/]ごとに年・月・日へ3分割し、基準ファイル名を生成。
不要になったvbsを削除した後、
カレントのバックアップデータ対象を全てチェック(*を入れて時刻部分ありも対象に)、
基準ファイル名と比べて古ければ削除。
といった流れになっています。
問題視しているのは、このバッチを使うのがドイツの環境であり、
作成されるバックアップデータに使われる日付フォーマットが「yyyyMMdd」固定なのに対し、
基準ファイル名に使われる日付フォーマットが「ddMMyyyy」になることによって、
フォーマット違いで正しい削除ができない可能性があることです。
コントロールパネル>地域 の設定にて、日付フォーマットを「ddMMyyyy」に変更、
地域もドイツに変更し、削除を実行しました。
しかし、VBSで取得されている日付は「ddMMyyyy」の形式になっているのにも関わらず、
3分割した年月日を
set OLD=TEST_BACKUP_%%A%%B%%C
で格納した際には、「TEST_BACKUP_yyyyMMdd」になり、
正常に削除出来ている…というのが現状です。
フォーマットが異なるのに、変数格納した時にフォーマットが変わるのが何故なのかが分かりません。
どなたか、ご教授いただけないでしょうか?
追記
Y.H.さんの回答を参考に、ロケールの取得・変更を行ってログを出力するようにしてみました。
for /f %%E in ('cscript //nologo GetLocale.vbs') do ( echo "%%E" 1>> %LOG% 2>&1 …(1) ) for /f %%F in ('cscript //nologo SetLocale.vbs') do ( echo "%%F" 1>> %LOG% 2>&1 …(2) ) for /f %%G in ('cscript //nologo GetLocale.vbs') do ( echo "%%G" 1>> %LOG% 2>&1 …(3) ) echo WScript.Echo DateAdd("d",-3,Date) > tmp.vbs for /f "delims=/ tokens=1-3" %%A in ('cscript //nologo tmp.vbs') do ( echo "%%A" 1>> %LOG% 2>&1 …(4) echo "%%B" 1>> %LOG% 2>&1 …(5) echo "%%C" 1>> %LOG% 2>&1 …(6) set OLD=CI_DBBACKUP_%%A%%B%%C echo "%%A , %%B , %%C , !OLD!" 1>> %LOG% 2>&1 …(7) ) cscript //nologo tmp.vbs 1>> %LOG% 2>&1 …(8)
GetLocal.vbsでは取得のみ
SetLocale.vbsではロケールのセット(1031)と取得
を行っています。
この結果、次のようにログが出力されました。
(1)"1041"
(2)"1031"
(3)"1041"
(4)"2020"
(5)"02"
(6)"10"
(7)"2020 , 02 , 10 , CI_DBBACKUP_20200210"
(8)2020/02/10
環境自体は以下のようにドイツ環境を模しているのですが、まだ足りないところがあるのでしょうか…
加えて、別で疑問に思っているところが1点。
バックアップデータを取得してくる処理が同じバッチに入っている関係上、別のJavaアプリからProcessBuilderクラスを使用して引数付きでバッチを蹴っているのですが、これが日本語になるよう設定している…なんてことはあるのでしょうか…
回答2件
あなたの回答
tips
プレビュー