【コマンドプロンプト】前日日付、月末日付を変数に取得するバッチ。うるう年対応
コマンドプロンプトを使って前日、指定日、月末日付を変数に取得する。
「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
関連記事
-
【コマンドプロンプト】バッチファイルでCSVを1行ずつ処理をする方法
僕はプログラマーではないので、あまりカッコイイプログラムはかけませんが、CSVファイルを1行ずつ、バ
-
【コマンドプロンプト】net use で共有フォルダに接続できない場合。
システム エラー 1219 が発生しました。 同じユーザーによる、サーバー
-
【コマンドプロンプト】32bit以上の計算をする方法(引き算)
コマンドプロンプトで計算するときに「Set /a ~」で計算式を使うと符号付32bitの間でしか計算
-
【コマンドプロンプト】バッチでセクション付のINIファイルの読み込み
バッチファイルでINIファイルから値を読み込む 1.INIファイルの用意 以下の「バッチファイル
-
【コマンドプロンプト】前後の不要なスペースの除去(取り除く)
コマンドプロンプトのFOR文とか使って変数に取得しようとすると、取得元のコマンドとかファイルによって
-
【コマンドプロンプト】完成版!cmdでSQLの結果を変数に取得
以前、 【コマンドプロンプト】cmdでSQLの結果を変数に取得する方法 を書きましたが、
-
【コマンドプロンプト】cmdでSQLの結果を変数に取得する方法
力技の取得方法をご紹介。というかメモ。 題名には偉そうに書きましたが…なかなか良い方法が見つか
-
【コマンドプロンプト】改行コード CR、LF、CRLFの出力とテキスト書き出し。
仕事でバッチファイルを使っているとログ出力が非常に大事になる。 細かくログを出すことによって、