2011-08-15 4 views
3

コマンドを呼び出し、前日の日付パラメータを渡すバッチファイルを作成する必要があります。バッチファイル内の前日の変数

例:

[機能] CCYYMMDD

私はこれのいずれかの例を見つけることができないようです。私の会社は私たちにフリーウェアを使うのが好きではないので、純粋なDOSベースのソリューションであるというソリューションが本当に必要です。

+0

ちょっと前にちょっとしたバッチベースの不快感が出てきました(自分でGoogle検索をしたい場合は、ApacheのログファイルをWin32で回転させるスクリプトでした)。君は。それは何のWin版ですか?私は2K3で動作するように修正しなければならないことを覚えているようです... – DaveRandom

+0

なぜ私はそれを修正しなければならなかったのか思い出しました。これは、 'date'コマンドがシステムのローカライゼーション設定 - これは、1台のマシンか、潜在的に異なる設定のものであるか? – DaveRandom

+0

Windowsサーバー2008 R2 –

答えて

2

から始めることができますDostips: Date and Time
日にちを評価する関数があり、その逆もあります。

call :jdate "%date%" JD_result 
set /a prev_day=JD_result-1 
call :jdate2date %prev_day% YYYY MM DD 
echo Previous day is %DD%.%MM%.%YYYY% 
+0

次のエラーが表示されました:指定されたバッチラベルが見つかりません - jdate –

+0

dostipsからバッチファイルに関数をコピーすることをお勧めします – jeb

0

へだからの結果、私はこのために持っていたオリジナルの解決策を見つけることができませんが、私はうまく仕事をするsomething over at Rob Van Der Woude's siteを見つけました。

SET /Aは、0から始まる文字列を8進数として扱うため、日/月の日付がゼロから始まる場合に問題が発生します。

あなたは上記のリンクされたファイルを取得しますが、コードの変更した場合:にJDATE手順(ライン157):

SET MonthChecker1=%2 
SET MonthChecker2=%MonthChecker1:~0,1% 
IF %MonthChecker2%==0 (
    SET MonthChecker3=%MonthChecker1:~1,1% 
) ELSE (
    SET MonthChecker3=%MonthChecker1% 
) 
SET DayChecker1=%3 
SET DayChecker2=%DayChecker1:~0,1% 
IF %DayChecker2%==0 (
    SET DayChecker3=%DayChecker1:~1,1% 
) ELSE (
    SET DayChecker3=%DayChecker1% 
) 
SET /A Month1 = (%MonthChecker3% - 14)/12 
SET /A Year1 = %1 + 4800 
SET /A JDate = 1461 * (%Year1% + %Month1%)/4 + 367 * (%MonthChecker3% - 2 -12 * %Month1%)/12 - (3 * ((%Year1% + %Month1% + 100)/100))/4 + %DayChecker1% - 32075 
FOR %%A IN (Month1 Year1) DO SET %%A= 
GOTO:EOF 

これはテストの結果、2K8R2ボックスに取り組んでいます。それは、ホストシステムの日付形式がレジストリからどのようなものであるかを判断する機能を持っているので、そこにある他のソリューションに対してもこれを使う価値があります。

+0

8進数の問題を解決するには、 'set/a Month = 1%Month %%% 100'の場合、常にte番号に '1'を接頭し、モジュロは安全な方法で削除します – jeb

関連する問題