2024-05-22|閱讀時間 ‧ 約 35 分鐘

各月份計畫事項事先通知LINE群組

1. 設計功能            

將整年份計畫事項,包含每月一次或每單月一次,每雙月一次之固定日期將來臨前,需要事先準備執行的事項,先一件一件記入在文字檔內,以便能該事件來臨前幾天,以LINE訊息自動發送出該事件內容給群組全員,讓全員可以事先接到通知,事先做好準備,才不會遺忘重要計畫事件。

本件適用於各團體單位,尤其是年度內有許多定例計劃事項,需按時執行或舉辦之各種活動。

          

2. 作業說明       

2.1 讀取參數檔內含送信日,與計畫事項之訊息內容                

先Read 取得  input file內多筆Plan do 事項 ( input file: LINE_send_notify_par-LIN.txt)          

      讀取方法:            

      FOR /F "tokens=1,2* delims=?" %%i in ('findstr /C:"D?" LINE_send_notify_par-LIN.txt' ) do ( CALL :PlanDo %%j "%%k" )     

          

2.2  計畫事項取得處理  (CALL :PlaDo )             

2.2.1 取得計畫事項之日期與事項內容         

       <1>日期 :  set par_md=%1 

           該事件訊息於何日會發送出LINE訊息,依據%1 參數取得後,再判斷取得%1當日,與其前一天,共取得兩次發送日,即該事件將會連續兩天發出LINE訊息

       <2> 內容:  set par_message=%2    

           該事件訊息內容,依據%2 參數取得

2.2.2 送信日的前一日之取得處理         

       判斷今日是否為 發送日之前一日

       STEP1.0,0  檢查par  日期 是否正確判斷  

       STEP1.0,1  par前一日之篩選出範圍內

       STEP1.0.2 根據par_dd 前一天,得send_dd  ex.om14/ em14/ mm14 /0814  

           根據par_mm, 取得send_mm

           當前一日send_dd==00  特別處理  變為前月之第一日  ( CALL  :LastM_FinalDay )

       STEP1.0.3 若par前一天 ==今日,取得send訊息追加出力par檔 (當%send_mm%=99 不會send)    

2.2.3 送信日為當日之取得處理 

       判斷今日是否為 發送日

       STEP1.1,1  par當日之篩選出範圍內, 此時send_mm 為 上步驟 取得par前一日之月份    

       STEP1.1.2 根據par 取得par當日之send_dd      

       STEP1.1.3 若par日期 ==今日,取得send訊息追加出力par檔 (當%send_mm%=99 不會send) 

          

2.3 取得LINE send訊息後,執行LINE傳送程式 (CALL python exe檔  )           

2.3.1 發送LINE訊息內容於2.2 已取得       

2.3.2 欲發送給哪個LINE群組  之 token  序號出力至LINE傳送參數檔 

         (echo T,xxxxxxxxx3cs>> LINE_send_notify_par.txt)       

2.4 上述內容之詳細指令,請参考下面第四点bat設計


3. 實例說明          

3.1 PlanDo 計畫事項之txt檔案內容,依據個別需要,自行制訂年度計劃事項,可追加刪除,並且該計畫內容可多年使用

 即入力檔  ( LINE_send_notify_par-LIN.txt) 內容 如下:

D?mm14?每月18日前繳、玉山信用卡費
D?mm26?每月29日前繳、百管費
D?mm28?每月30日前繳、聯邦,華南,兆豐信用卡

D?om19?單月21日前繳、水費

D?em24?雙月28日前繳、電費
D?em26?雙月28日前繳、國保費

D?0423?每年 430日前繳,機車及汽車牌照稅
D?0523?每年 528日前繳,機車及汽車保險
D?0525?每年 531日前繳,所得稅,及房屋稅
D?0526?每年 531日郵局轉帳,房屋稅
D?0727?每年 731日前繳、機,汽車燃料稅
D?0729?每年 801日前,掛號信轉址申請
D?0903?每年 907日郵局轉帳、新光保險費
D?1019?每年1023日郵局轉帳,新光保險費
D?1126?每年1130日郵局轉帳、地價稅
D?1009?每年舊曆9/9先祖忌拜

   3.2 本例執行後,發送出LINE訊息

     依據上述檔案內之

D?0523?每年 5月28日前繳,機車及汽車保險

 因本日5/22,故於5/22,5/23連續兩天,都會發出LINE訊息內容如下:


4  執行檔bat 設計內容如下 :

 @ECHO OFF
REM ---2個入力檔(1)LINE_send_notify_par.txt Python程式用 (2)LINE_send_notify_par-LIN.txt 計畫事日期
rem ---注意: par txt file 之傳送內容不可有 () ,因 cmd 會錯亂致當掉 ---
d:
rem cd D:\HTW-IT\LINEN
cd D:\lin_PC\cmd-bat\bat\LINE_Notify\LIN
set send_mm=99
set send_dd=88
set oem=nul
set send_F=N
set T_mm=%DATE:~5,2%
set T_dd=%DATE:~8,2%
::---判斷今日是奇月odd 或偶月even---
echo %T_mm% | findstr "02 04 06 08 10 12"
if %errorlevel%==0 set oem=even

rem Note---LINE_notify_par第一行空值不可, 右邊錯誤---echo.> LINE_send_notify_par.txt
echo M,> LINE_send_notify_par.txt
REM -----STEP1 Read 取得par file內多筆Plan do 事項 -----
FOR /F "tokens=1,2* delims=?" %%i in ('findstr /C:"D?" LINE_send_notify_par-LIN.txt' ) do ( CALL :PlanDo %%j "%%k" )

REM -----STEP2 取得send訊息後,執行傳送訊息LINE群組for python)---
if %send_F%==Y (
echo T,e7iEtrrrrrrrrrrrrrr5qEa0luu>> LINE_send_notify_par.txt
CAll LINE_send_notify.exe )
rem pause job end-----
EXIT

:PlanDo
set par_md=%1
set par_message=%2
set par_message=%par_message:"=%
set par_mm=%par_md:~,2%
set par_dd=%par_md:~2,2%

REM -----STEP1.0,0 檢查par 是否正確
echo %par_mm% | findstr "mm em om"
if %errorlevel%==0 (goto par_mmOK
) else ( if %par_mm% GTR 00 (
if %par_mm% LSS 13 (goto par_mmOK) else (echo ### ERROR par_mm 大於12 & goto PlanDo_Exit)
) else ( echo ### ERROR par_mm 小於00 & goto PlanDo_Exit ) )
:par_mmOK

if %par_dd% GTR 00 (
if %par_dd% LSS 32 (goto par_ddOK ) else (echo ### ERROR par_dd 大於31 & goto PlanDo_Exit )
) else ( echo ### ERROR par_dd 小於00 & goto PlanDo_Exit )
:par_ddOK

REM -----STEP1.0,1 par前一日之判斷是否要送信???
if NOT %par_mm:~1,1%==m (
if NOT %par_mm%==%T_mm% (
if NOT %par_dd%==01 goto PlanDo_Exit )
)

REM -----STEP1.0.2 根據par_dd 前一天,得send_dd ex.om14/ em14/ mm14 /0814
::---Note 08, 09 cannot compute, change to 8,9; 計算後小於100,00 保留
set send_dd=%par_dd%
if %par_dd:~,1%==0 ( set send_dd=%par_dd:0=% )
set /a send_dd=%send_dd% - 1
if %send_dd% LSS 10 (set send_dd=0%send_dd% )

::-----根據par_mm, 取得send_mm
if %par_mm:~1,1%==m ( CALL :MM_OM_EM %par_mm%
) else ( set send_mm=%par_mm% )
if %send_mm% NEQ 99 (
if %send_dd%==00 ( CALL :LastM_FinalDay %send_mm% ) )

REM -----STEP1.0.3 若par前一天 ==今日,取得send訊息追加出力par檔 (%send_mm%=99 不會send)
if %T_mm%==%send_mm% (
if %T_dd%==%send_dd% (
echo M,%par_message%>> LINE_send_notify_par.txt
set send_F=Y ))
rem pause --- step 1.0.3 chk

REM -----STEP1.1,1 par當日之判斷是否要送信??? (此時send_mm 為par前一日之月份)
if NOT %par_dd%==%T_dd% ( goto PlanDo_Exit
) else (
if NOT %par_dd%==01 (
if NOT %send_mm%==%T_mm% goto PlanDo_Exit )
)
REM -----STEP1.1.2 根據par 取得par當日之send_dd
set send_dd=%par_dd%
::-----根據par_mm, 取得send_mm
if %par_mm:~1,1%==m ( CALL :MM_OM_EM %par_mm%
) else ( set send_mm=%par_mm% )

REM -----STEP1.1.3 若par日期 ==今日,取得send訊息追加出力par檔 (%send_mm%=99 不會send)
if %T_mm%==%send_mm% (
if %T_dd%==%send_dd% (
echo M,%par_message%>> LINE_send_notify_par.txt
set send_F=Y ))
:PlanDo_Exit
rem pause --- step 1.1.3 chk
exit /b

:MM_OM_EM
set send_mm=99
if %1==mm (set send_mm=%T_mm% & goto BRK )
if %oem%==even (
if %1==em (set send_mm=%T_mm%
) else ( goto BRK)
) else (
if %1==om (set send_mm=%T_mm% )
)
:BRK
exit /b

:LastM_FinalDay
set send_mm=%1
if %send_mm:~,1%==0 ( set send_mm=%send_mm:0=% )
set /a send_mm=%send_mm% - 1
if %send_mm% LSS 10 (set send_mm=0%send_mm% )
rem FOR /F "tokens=1 delims= " %%i in ('echo %send_mm% ^| findstr "04 06 09 11" ') do ( set send_dd=30 )
rem ---不可 ^| 因errorlevel 結果取得都會0
echo %send_mm% | findstr "04 06 09 11"
if %errorlevel%==0 (
set send_dd=30
) else ( set send_dd=31 )
if %send_mm%==02 (
set send_dd=28
) else (
if %send_mm%==00 (set send_mm=12 ) )
exit /b


5 自動排程設定

上述執行檔bat設定於Windows自動排程,讓它能自動執行,若該日是發送日,將自動發送LINE訊息至設定的LINE群組,以達到能主動事先發送LINE訊息之功能。

-------recorded by linct ------

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.