20200710
■やりたいこと
・毎月第3水曜の10時と、その翌日9時にbatを定期実行させたい。
・タスクスケジューラからだと、第3水曜10時とかは設定できるが、その翌日9時、というのが設定しずらい。例えば、一日が木曜だった場合は、第3水曜は21日だが、第3木曜は15日となる。
・そこで、いつ実行するのかの日付をリストにしてファイルに記載しておき、タスクを毎日実行させ、今日がリストに載っている日付 だった場合に実行させることにする。
■最終的に出来たこと
上記の処理。
■フォルダ構成
…デスクトップ\マクロフォルダ\
…デスクトップ\マクロフォルダ\hoge_第3水曜日.bat <-これをタスクスケジューラから定期実行させる
…デスクトップ\マクロフォルダ\hoge_第3水曜日.ttl
…デスクトップ\マクロフォルダ\3rdWednesday.txt
以下、躓いた点をまとめる。
■hoge_第3水曜日.bat
SET TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
SET FLAG=0
for /f %%i in (3rdWednesday.txt) do (
if %%i == %TODAY% ( <-変数を呼び出すとき 変数前後の%を忘れないようにする
SET FLAG=1 <-再代入するとき 「SET」を忘れたので注意する
)
)
if %FLAG% == 1 ( <-変数を呼び出すとき 変数前後の%を忘れないようにする
"C:\・・・\ttpmacro.exe" "C:\・・・\hoge_第3水曜日.ttl"
)
保存するとき、「Shift-JIS」でないと、batファイル名が文字化けしてうまく動かない。編集でメモ帳使っていると気付きにくい。
■hoge_第3水曜日.ttl
;ログの保存先の設定
drivepass="C:\・・・\log\"
;ログファイル名の作成
getdate filename "%Y%m%d"
strconcat filename '_'
strconcat filename "%H%M%S"
strconcat filename '_・・・.log'
;サーバに接続
connect SERVER
;システム変数inputstr ヘ値が格納される
sprintf '%s%s' drivepass filename
;ログの取得を開始する
call logopen ★
:logopen
logopen inputstr 0 0
pause 1
return
★でエラーが出た。調べたところ、Teratermの設定が、ログを自動取得する設定になっていたためであった。
TeraTermで下記設定を実施し解決した。
・Default log file name を空欄にする。
・Default log save folder を空欄にする。
・Auto start logging のチェックをはずす。
■3rdWednesday.txt
20200715
20200819
20200916
・・・
■タスクスケジューラ
プログラム/スクリプト
"C:\・・・\Desktop\マクロフォルダ
\hoge_第3水曜日.bat"
開始(オプション)
C:\・・・\Desktop\マクロフォルダ <-hoge_第3水曜日.batファイル内で、カレントディレクトリに依存するコマンドがあるので(3rdWednesday.txt の部分)、ここが空欄だとうまく動かない。