*

【コマンドプロンプト】前日日付、月末日付を変数に取得するバッチ。うるう年対応

コマンドプロンプトを使って前日、指定日、月末日付を変数に取得する。

「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の出力とテキスト書き出し。

仕事でバッチファイルを使っているとログ出力が非常に大事になる。 細かくログを出すことによって、

記事を読む

Adsense

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

Microsoft Office
【Access】削除クエリの「指定されたテーブルから削除できませんでした。」の対処法

削除クエリで「指定されたテーブルから削除できませんでした。」と ポッ

Microsoft Office
【PowerPoint】表や図形、画像オブジェクトの位置をピッタリ合わせる方法

パワーポイントで、図形や画像等のオブジェクトの細かい位置調整は、 完

データベース
【SQL Server】Excel VBAのレコードセットを使ってテーブルの一括更新

前々回は読み取り専用でレコードセットへ取得し、結果をエクセルへ書き出し

application
【Visual Studio】デバック、ブレークポイントで止まらない。

Visual Studio 2015でVB.netのプログラムをデバッ

データベース
【SQL Server】Excel VBAでSELECT文を実行してレコードセットへ取得

前回は、テーブルのレコードをVBAで直接更新(Insert/updat

→もっと見る

PAGE TOP ↑