[Azure] WebAppsのWebジョブから起動したバッチファイルでdateを扱う場合、mm/dd/yyyy形式になるので注意


タイトルがほぼ情報の全てですが、バッチファイル内で現在日時を取得し、それを引数としてプログラム実行することがあります。

前月(YYYYMM)を引数としてプログラム起動
rem ---現在年月の取得---
set dt=%date:~-10%
set yy=%dt:~0,4%
set mm=%dt:~5,2%

rem ---前月を計算---
set /a mm=%mm%-1
if %mm%==00 (
    set mm=12
    set /a yy=%yy%-1)

rem ---mmを0埋めして引数とする---
set mm=0%mm%
set mm=%mm:~-2%
set PREVIOUS_MONTH=%yy%%mm%

node myprocess.js %PREVIOUS_MONTH%

これをAzure WebAppsのWebジョブとして実行した場合、dateの結果がmm/dd/yyyy形式になるため、正常に起動しません。上記の実行結果は・・・

mm/dd/yyyy形式から日付を取得するため、バッチファイルを少し修正します。変更点は 3, 4行目(yyとmmの取得位置)です。

前月(YYYYMM)を引数としてプログラム起動(改)
rem ---現在年月の取得---
set dt=%date:~-10%
set yy=%dt:~6,10%
set mm=%dt:~0,2%

rem ---前月を計算---
set /a mm=%mm%-1
if %mm%==00 (
    set mm=12
    set /a yy=%yy%-1)

rem ---mmを0埋めして引数とする---
set mm=0%mm%
set mm=%mm:~-2%
set PREVIOUS_MONTH=%yy%%mm%

node myprocess.js %PREVIOUS_MONTH%

動かしてみると、今度は無事実行できました。

WebAppsはアプリケーション設定で(WEBSITE_TIME_ZONE:Tokyo Standard TImeを設定することにより)タイムゾーンを変更できますが、日付と時刻の形式は今のところ変更できないようです。

また、こちらの記事 にあるような地域設定に依存しないバッチへの修正は、wmicコマンドがWebAppsのユーザ権限で実行できないため、修正することができませんでした。

D:\home>wmic os get LocalDateTime
Access is denied.

できれば実行されるプログラムの方で日付計算するよう変更した方がいいと思いますが、既存のバッチをWebジョブにそのまま移設したい場合は、dateの処理に注意する必要があります。