【コマンドプロンプト】前日日付、月末日付を変数に取得するバッチ。うるう年対応
コマンドプロンプトを使って前日、指定日、月末日付を変数に取得する。
「SearchDay」に入力された日付に対して、前日日付が「ResultDay」に取得する。
VBSやVBAとかなら-1するだけで良いから楽だけど、コマンドプロンプトでやろうとするとめんどくさいことになる。
@ECHO OFF
Setlocal enabledelayedexpansion
REM 前日を検索したい日をYYYY/MM/DD形式でセット
Set SearchDay=%date%
REM Set SearchDay=2000/03/01
REM 前日取得サブルーチンを呼び出し
Call :GET-Yesterday ResultDay %SearchDay:~0,4% %SearchDay:~5,2% %SearchDay:~8,2%
ECHO 検索日:%SearchDay%
ECHO 前日 :%ResultDay%
PAUSE
EXIT
:GET-Yesterday
REM =====================================================================
REM
REM 前日を取得
REM
REM %1: 取得変数名
REM %2: 年(YYYY)
REM %3: 月(MM)
REM %4: 日(DD)
REM
REM =====================================================================
REM ------------------------------------------------
REM 引数を取得
REM ------------------------------------------------
Set yy=%2
Set mm=%3
Set dd=%4
REM ------------------------------------------------
REM 日(dd)を-1(1~9の場合は「0」を付与し、二桁にする)
REM ------------------------------------------------
Set /a dd=%dd%-1
Set dd=00%dd%
Set dd=%dd:~-2%
REM ------------------------------------------------
REM うるう年計算処理(うるう年の場合はymod=0)
REM ------------------------------------------------
REM 年を4で割った余りをymodに取得
Set /a ymod=%yy% %% 4
REM 余りがない(4の倍数である)
IF "%ymod%"=="0" (
REM 年を100で割った余りを取得
Set /a ymod_100=%yy% %% 100
REM 100で割りきれているか
IF !ymod_100!==0 (
REM 年を400で割った余りを取得
Set /a ymod_400=%yy% %% 400
REM 400で割り切れていない場合(2100年など)
IF NOT !ymod_400!==0 (
REM うるう年を無に設定
Set /a ymod=1
)
)
)
REM ------------------------------------------------
REM 前月の設定(ddが「00」となる場合)
REM ------------------------------------------------
REM 各月ごとで値をセット
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)
)
REM ------------------------------------------------
REM 指定された引数へ値を入力
REM ------------------------------------------------
REM 引数1へ値の代入
Set %1=%yy%/%mm%/%dd%
:EOF
Adsense
関連記事
-
-
【コマンドプロンプト】32bit以上の計算をする方法(引き算)
コマンドプロンプトで計算するときに「Set /a ~」で計算式を使うと符号付32bitの間でしか計算
-
-
【コマンドプロンプト】net use で共有フォルダに接続できない場合。
システム エラー 1219 が発生しました。 同じユーザーによる、サーバー
-
-
【コマンドプロンプト】前後の不要なスペースの除去(取り除く)
コマンドプロンプトのFOR文とか使って変数に取得しようとすると、取得元のコマンドとかファイルによって
-
-
【コマンドプロンプト】バッチでセクション付のINIファイルの読み込み
バッチファイルでINIファイルから値を読み込む 1.INIファイルの用意 以下の「バッチファイル
-
-
【コマンドプロンプト】cmdでSQLの結果を変数に取得する方法
力技の取得方法をご紹介。というかメモ。 題名には偉そうに書きましたが…なかなか良い方法が見つか
-
-
【コマンドプロンプト】改行コード CR、LF、CRLFの出力とテキスト書き出し。
仕事でバッチファイルを使っているとログ出力が非常に大事になる。 細かくログを出すことによって、
-
-
【コマンドプロンプト】完成版!cmdでSQLの結果を変数に取得
以前、 【コマンドプロンプト】cmdでSQLの結果を変数に取得する方法 を書きましたが、
-
-
【コマンドプロンプト】バッチファイルでCSVを1行ずつ処理をする方法
僕はプログラマーではないので、あまりカッコイイプログラムはかけませんが、CSVファイルを1行ずつ、バ
