0

いくつかの日付計算を行うかなり小さなバッチ ファイルを作成しました。

ただし、小さな問題に遭遇しました。

月の変数をインクリメントしようとするたびに、変数を目的の増分に設定するだけです。コード:

: How much time should we add? Default is 1 month
SET timeadd=1

: Set the date variables to build needed format
SET YYYY=%date:~-4%
SET MM=%date:~3,2%
SET DD=%date:~0,2%

if not %MM%==12 (
    SET /A MM=MM+timeadd
    SET changed=1
)

宣言後、月 var は今日 (8 月 17 日) は "08" になります。

ただし、if ブロックの後、この var は「1」に変更されます。

これは変換の問題 (日付は文字列、timeadd は整数) であると推測できますが、これを解決する方法がわかりません。

4

1 に答える 1

1

コメントで述べたように、これは、先頭0が 8 進数表記を示している (先頭0xが 16 進数表記を示しているように) ために発生していますが、8 進数システムは 01 から 07 まで実行されるため、8 進数の 08 または 09 はなく、むしろ 010 になります。そして011。

10 進値 8 == 8 進値 010

10 進値 9 == 8 進値 011

これを自分で確認するには、コマンドプロンプトでこれを入力します

c:\>set /a 010
c:\>set /a 011

出力は次のようになります。

8
9

=======================================

これに対する私の解決策は、先頭の をチェックして0削除することです。

if "%MM:~0,1%"=="0" set MM=%MM:~-1%

私がしなければならない数学の魔法をしてください...

set /a MM=%MM% + 1

...そして、0必要に応じて先頭の を追加します。

set MM=0%MM%
set MM=%MM:~-2%

12 (この場合) を超えたり、1 未満になったりしないように注意してください。

于 2012-08-29T15:45:53.743 に答える