KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

祝日以外にWindowバッチを実行するプログラムを作りたい

登録日 :2023/12/23 20:22
カテゴリ :Python基礎

pythonを用いて、土日祝日のリスト(ファイル)を自動生成して、土日祝日以外にWindowバッチを実行するプログラムを作成してみた。

土日祝日を判定するため、以下のライブラリをインストールしておく。

pip install jpholiday

このライブラリをつかって、土日祝日のリストを作成する。

参考サイト)
https://zenn.dev/shiro_toy_box/articles/724a601b208398
https://qiita.com/kodai100/items/f953e92d78f4ae345ee6

import os
import sys
import jpholiday
import datetime
from colorama import Fore, init


def print_day_off():
    init()
    now_year = datetime.datetime.now().year
    date = datetime.datetime(now_year, 1, 1, 0, 0)

    WEEKDAY = ('月','火','水','木','金','土','日')

    for i in range(365):

        date_str = date.strftime(r"%Y-%m-%d")
        holiday = jpholiday.is_holiday_name(date)

        # 曜日の取得
        week = WEEKDAY[date.weekday()]

        # 文字に色をつける
        if week == WEEKDAY[-1]:
            week = Fore.RED + week
        elif week == WEEKDAY[-2]:
            week = Fore.BLUE + week

        # 祝日なのか(jpholiday.is_holidayでも可)
        if holiday is None:
            print(f'{Fore.RESET + date_str} {week}曜日 ')
        else:
            print(f'{Fore.RESET + date_str} {Fore.RED + week}曜日 {holiday}')
        date += datetime.timedelta(days=1)
    else:
        print(Fore.RESET)  # 色のリセット


def create_holiday_list():
    filename = 'day_off_list.txt'
    init()
    now_year = datetime.datetime.now().year
    date = datetime.datetime(now_year, 1, 1, 0, 0)

    WEEKDAY = ('月', '火', '水', '木', '金', '土', '日')

    with open(filename, 'w') as fp:
        for i in range(365):
            date_str = date.strftime(r"%Y-%m-%d")
            holiday = jpholiday.is_holiday_name(date)
            # 曜日の取得
            week = WEEKDAY[date.weekday()]

            if week == WEEKDAY[-1] or week == WEEKDAY[-2]:
                print(str(date_str), week)
                fp.write(str(date_str) + '\n')
            # 祝日なのか
            elif holiday:
                # print_day_off(f'{Fore.RESET + date_str} {Fore.RED + week}曜日 {holiday}')
                print(str(date_str), week)
                fp.write(str(date_str) + '\n')

            date += datetime.timedelta(days=1)


def is_holiday():
    now_time = datetime.datetime.now()
    date_str = now_time.strftime(r"%Y-%m-%d")
    print(date_str)

    holiday_file = 'day_off_list.txt'

    with open(holiday_file, 'r') as fp:
        holidays = fp.readlines()

    for idx, holiday in enumerate(holidays):
        holiday = holiday.strip('\n')
        # print(idx, holiday)
        if date_str == holiday:
            print(date_str)
            return True


def execute_bat():
    cmd_file = 'hoge.bat'
    argvs = sys.argv
    argc = len(argvs)

    command = cmd_file

    for i in range(1, argc):
        command += " " + argvs[i]

    os.system(command)


if __name__ == '__main__':

    # create_holiday_list()
    # print(is_holiday())
    if not is_holiday():
        execute_bat()
    else:
        print('Holiday')

Windowバッチサンプル

@echo off

echo ".cmd Executed"

for %%f in (%*) do (
    echo %%f
)

echo "Completed"