batで昨日の日付取得したらミスった話
WindowsServerで現在から1日前の日付をyymmdd形式で取り出すバッチ
http://tmgbl.blog.fc2.com/blog-entry-30.html
↑の記事を参考に昨日の日付を取得してファイルのコピーをなんやかんや…
ってbatファイル作ってたんですが、今日になって何故かエラーを吐く。
「無効な数字です。数値定数は 10 進 (17 桁)、16 進 (0x11 桁)、または 8 進 (021 桁) です。」
え、昨日は普通に動いてたやん…
そのときのコード
::今日の日付を取得 set yy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% echo Today is %yy%%mm%%dd% ::1日前の日付を計算する set /a dd=%dd%-1 set dd=00%dd% set dd=%dd:~-2% set /a ymod=%yy% %% 4 if %dd%==00 ( if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1) if %mm%==02 (set mm=01&& set dd=31) if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29)) if %mm%==04 (set mm=03&& set dd=31) if %mm%==05 (set mm=04&& set dd=30) if %mm%==06 (set mm=05&& set dd=31) if %mm%==07 (set mm=06&& set dd=30) if %mm%==08 (set mm=07&& set dd=31) if %mm%==09 (set mm=08&& set dd=31) if %mm%==10 (set mm=09&& set dd=30) if %mm%==11 (set mm=10&& set dd=31) if %mm%==12 (set mm=11&& set dd=30) ) echo Yesterday is %yy%%mm%%dd%
ってことで、検索したらこういうことみたい。
Windowsバッチで日付計算を扱う際の注意点
https://qiita.com/giiwa/items/c4b0ace52b191d58da83
8進で判定されるのか…
ってことで一行足します。
::今日の日付を取得 set yy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% echo Today is %yy%%mm%%dd% ::1日前の日付を計算する set /a dd=1%dd%-100 set /a dd=%dd%-1 set dd=00%dd% set dd=%dd:~-2% set /a ymod=%yy% %% 4 if %dd%==00 ( if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1) if %mm%==02 (set mm=01&& set dd=31) if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29)) if %mm%==04 (set mm=03&& set dd=31) if %mm%==05 (set mm=04&& set dd=30) if %mm%==06 (set mm=05&& set dd=31) if %mm%==07 (set mm=06&& set dd=30) if %mm%==08 (set mm=07&& set dd=31) if %mm%==09 (set mm=08&& set dd=31) if %mm%==10 (set mm=09&& set dd=30) if %mm%==11 (set mm=10&& set dd=31) if %mm%==12 (set mm=11&& set dd=30) ) echo Yesterday is %yy%%mm%%dd%
これでしっかり計算できてました。
バックアップのスクリプトなので、気付いてなかったらちょっとヤバかった。
気をつけねば…
ディスカッション
コメント一覧
まだ、コメントがありません