2009-08-20 7 views
0

毎晩私は現在の日付から36日前のフォルダで作業する必要があります。私は以下のような毎日の構造にファイルを書き込むシステムを持っています。私はローカルディスクに35日分の価値を残す必要があるので、毎晩、私は36日目をアーカイブする必要があります。キッカーは... 1日に約200万のファイルがあるので、2009年のフォルダ全体を効率的にスキャンできず、35日以上経過したファイルだけを移動することはできません。私がする必要があるのは、バッチスクリプトが36日前のフォルダのパスを決定してから、アーカイブロジックを適用することです。私は決定するスクリプトを持っていますが、36日までの決定に問題があります。ピンチでは、これを行うバッチ方法がない場合、私はperlを使うことができます。CMD/BAT - 日付を判断するヘルプ36日前

2009\07\01 
2009\07\02 
2009\07\03 
. 
. 
. 
2009\08\01 
2009\08\02 
2009\08\03 

@EDIT:ヘレンの偉大な答えは私が道の99%を持っている

--Shawnフォルダ構造は次のようです。私の唯一の問題は、vbsの月と日がフォルダ構造で処理しなければならないゼロで埋められていないことです。日または月が10未満の場合は、誰も先頭の0に埋め込む簡単な方法がありますか?ここで

は、私がこれまでやっているものです:

for /F "tokens=1-3 delims=/" %%x in ('cscript //nologo get36thday.vbs') do (
    SET YYYY=%%z 
    SET MM=%%x 
    SET DD=%%y) 

%以外MM%が7の代わりに、バッチオプションはかなり邪悪である07

答えて

0

から日が過ぎcompilcatedだろうかを決定するバッチ方法をdatetimeモジュールを使用してコード

数行のだろうと私は高いperlのをお勧めします。そのためにスクリプトを使用する方がはるかに簡単です。申し訳ありませんが、Perlのサンプルませんが、VBScriptの1:あなたは、バッチファイルからこのスクリプトを呼び出して、このような計算された日付読むことができます

WScript.Echo DateAdd("d", Date, -36) 

:あなたは私のようなGoogleとここに来た場合

for /f %%d in ('cscript //nologo datediff.vbs') do set dt=%%d 
1

あなたはそれがある月に計算する必要がありますされて終わりますその実行に基づいて、whileループは日数をカウントダウンします。それはCPAN

http://search.cpan.org/dist/DateTime/lib/DateTime.pm

my $dt = DateTime->now->subtract(days => 36); 
0

を:
先頭のゼロを.vbsに修正するには、前にゼロを追加し、正しい2文字を削除します。
"0" & "7" - > "07" と "0" & "14" - > "14"

OldDateCode.vbs:

OldDate = DateAdd("d", Date, -36) 
DateCode = Year(OldDate) & Right("0" & Month(OldDate), 2) & Right("0" & Day(OldDate), 2) 
WScript.Echo DateCode 

私はまた、第一のフォルダを維持したいです

If Right(DateCode, 2)="01" then 
    WScript.Echo "The 1st:" & vbCrLf & DateCode 
Else 
    WScript.Echo "Not the 1st:" & vbCrLf & DateCode 
End If 

CheckDate.bat:

012月はので、私は1日を確認するために、 "01"
VBSコードで、最後の2桁(日)を比較します

フォルダーをD:\に作成し、日付コードを36日前にします。 -36と日付コードで遊んでください。

関連する問題