Windows タスクスケジューラで定期実行

バッチファイルなどを作成した後に、オートで自動実行させたくなるものです。その時に便利なのが、Windowsに標準で装備されている、タスクスケジューラだと思う。

使用法は、様々なページで掲載されているが、今回参考にしたサイトは下記

http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html

簡易的に書いておくと
(1)新しくタスクを作成する。⇒タスクスケジューラの左ペインのツリーで[タスク スケジューラ (ローカル)]フォルダーを選択してから、右側の操作ペインで[基本タスクの作成]をクリックする。これでタスク作成ウィザードが起動する。

※[タスクの作成]の方をクリックすると、ダイアログ形式で細かい設定を指定しながらタスクを新たに作成できるがウィザード形式でタスクを作成し、その後で必要に応じて設定を変更する方法でいいだろう。

(2)タスクごとに作成していく。

(3)タスクを選択して、右窓の「実行する」をやれば、定時じゃなく、すぐに実行して結果をみることができるので、本当に動いているのか?確認することができる。

(追記)実際に登録されたかを確認する方法Windows10
スタートマークを右クリックして、コンピューターの管理を開きます。その中に、システムツール>>タスクスケジューラー>>タスクスケジューラーライブラリってのがりますので、それをクリックすると登録されているタスクが確認可能

LINUX FTPの自動化転送

下記のスクリプトで、実行すれば、設定したディレクトリに転送したいファイルが転送される。実際に実験したが、コマンドからやると一瞬で作業が完了して、処理しているか不安になるくらいだ。

ftp [-ginv] [host]

-g 正規表現によるファイル名展開を無効にする
-i 複数のファイルの転送中に,プロンプトを出力しない
-n .netrcを使用した自動ログインを行わない
-v リモート・サーバーから送られたすべての情報を表示する
host 接続するリモート・ホストを指定する

#!/bin/sh
HOST_NAME=”ホスト名またはIPアドレス”
USER_NAME=”ftpユーザー名”
PASSWORD=”パスワード”
LOCAL_DIR=”ローカル側の作業ディレクトリ”
GET_DIR=”ftp先の作業ディレクトリ”
FILE_NAME=”getするファイル名”

ftp -n ${HOST_NAME} << _EOF_ user ${USER_NAME} ${PASSWORD} bin lcd ${LOCAL_DIR} cd ${GET_DIR} get ${FILE_NAME} bye _EOF_

7ZIPをDOSプロンプトで使う。

Windows10で、自動でFTP接続をして、持ってきたデータを自動で解凍する。それをやる為に、バッチファイルで苦労をしている。そして、何とか出来上がった。

最初の1は、1番目に実行するって意味でつけました。また、-1は、当日じゃなく、1日前の日付で拾ってくるって意味で付けたものです。

結局は、ある一部のファイルが、ダウンロードしても、0バイトであり、解凍もできない状態で失敗。
ただ、下記のバッチファイルで、今回の様な変なデータじゃなければ簡単にWindowsのバッチファイルでも自動化できる内容になっている。

★1_ftp-1.bat

@echo off
set path=%path%;C:\data
set HOST=ここには、接続サーバー情報
set SCRIPT_FILE=exec.ftp

rem ftpコマンドのファイルを生成
call create_ftp_script-1.bat %HOST%

rem ftpコマンドを実行
ftpp -n -s:%SCRIPT_FILE%
del %SCRIPT_FILE%

★create_ftp_script-1.bat 上のバッチファイルで呼ばれるバッチファイル

@echo off
REM 日付の前日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 ans へ返す。
REM 引数がないときは本日とする。
set orgdate=%DATE:/=%

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~4,2%
set dd=%orgdate:~6,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set /a dd=dd-1

if %dd% NEQ 0 goto end

:月跨り処理
set /a mm=mm-1
if %mm% EQU 0 set mm=12&&set /a yy=yy-1

set sub=0030101001010 >sub.bat
set /a dd=31-%%sub:~%mm%,1%% >>sub.bat
call sub.bat

:後処理
if exist sub.bat del sub.bat

:閏年処理
:4で割り切れるか?
set /a u=yy %% 4
if not %u%==0 goto end
:100で割り切れて、400で割り切れないか?
set /a u=yy %% 400
set /a v=yy %% 100
if %v%==0 if not %u%==0 goto end
:2月か?
if %mm% EQU 2 set /a dd=dd+1

:end
set mm=0%mm%
set mm=%mm:~-2%

set dd=0%dd%
set dd=%dd:~-2%

rem下のような、3つの年月が加えられたファイルをダウンロードしようとしている。
set ans1=c023111%yy%%mm%%dd%001.zip
set ans2=c033111%yy%%mm%%dd%001.zip
set ans3=h013111%yy%%mm%%dd%001.zip

@echo off
set HOST=%1
set SCRIPT_FILE=exec.ftp
set FTPUSER=FTPのユーザー情報
set FTPPASSWD=FTPのユーザーPW
set GET_FILE1=%ans1%
set GET_FILE2=%ans2%
set GET_FILE3=%ans3%
set REMOTE_DIR=\

rem FTPスクリプトファイル作成開始
echo open %HOST% > %SCRIPT_FILE%
echo user>> %SCRIPT_FILE%
echo %FTPUSER%>> %SCRIPT_FILE%
echo %FTPPASSWD%>> %SCRIPT_FILE%
echo prompt
echo get %GET_FILE1%>> %SCRIPT_FILE%
echo get %GET_FILE2%>> %SCRIPT_FILE%
echo get %GET_FILE3%>> %SCRIPT_FILE%
echo bye>> %SCRIPT_FILE%

★2_unzip-1.bat

@echo off
REM 日付の前日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 ans へ返す。
REM 引数がないときは本日とする。
set orgdate=%DATE:/=%

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~4,2%
set dd=%orgdate:~6,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set /a dd=dd-1

if %dd% NEQ 0 goto end

:月跨り処理
set /a mm=mm-1
if %mm% EQU 0 set mm=12&&set /a yy=yy-1

set sub=0030101001010 >sub.bat
set /a dd=31-%%sub:~%mm%,1%% >>sub.bat
call sub.bat

:後処理
if exist sub.bat del sub.bat

:閏年処理
:4で割り切れるか?
set /a u=yy %% 4
if not %u%==0 goto end
:100で割り切れて、400で割り切れないか?
set /a u=yy %% 400
set /a v=yy %% 100
if %v%==0 if not %u%==0 goto end
:2月か?
if %mm% EQU 2 set /a dd=dd+1

:end
set mm=0%mm%
set mm=%mm:~-2%

set dd=0%dd%
set dd=%dd:~-2%

set ans1=c023111%yy%%mm%%dd%001.zip
set ans2=c033111%yy%%mm%%dd%001.zip
set ans3=h013111%yy%%mm%%dd%001.zip

set GET_FILE1=%ans1%
set GET_FILE2=%ans2%
set GET_FILE3=%ans3%
echo prompt
7za.exe e -pここにはPW %GET_FILE1%
7za.exe e -pここにはPW %GET_FILE2%
7za.exe e -pここにはPW %GET_FILE3%

★3_ftp.bat

@echo off
set path=%path%;C:\data
set HOST=FTPサーバー名が入る
set SCRIPT_FILE=exec.ftp

rem ftpコマンドのファイルを生成
call create_ftp_script.bat %HOST%

rem ftpコマンドを実行
ftpp -n -s:%SCRIPT_FILE%
del %SCRIPT_FILE%

★create_ftp_script.bat 上のバッチファイルで呼ばれるバッチファイル

@echo off
REM 日付の前日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 ans へ返す。
REM 引数がないときは本日とする。
set orgdate=%DATE:/=%

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~4,2%
set dd=%orgdate:~6,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set ans1=K0BIZ311K0%yy%%mm%%dd%1.zip
set ans2=SS1001311%yy%%mm%%dd%0.zip

@echo off
set HOST=%1
set SCRIPT_FILE=exec.ftp
set FTPUSER=FTPのユーザー名
set FTPPASSWD=FTPのパスワード
set GET_FILE1=%ans1%
set GET_FILE2=%ans2%
set REMOTE_DIR=\

rem FTPスクリプトファイル作成開始
echo open %HOST% > %SCRIPT_FILE%
echo user>> %SCRIPT_FILE%
echo %FTPUSER%>> %SCRIPT_FILE%
echo %FTPPASSWD%>> %SCRIPT_FILE%
echo prompt
echo get %GET_FILE1%>> %SCRIPT_FILE%
echo get %GET_FILE2%>> %SCRIPT_FILE%
echo bye>> %SCRIPT_FILE%

★4_unzip.bat

@echo off
REM 日付の前日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 ans へ返す。
REM 引数がないときは本日とする。
set orgdate=%DATE:/=%

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~4,2%
set dd=%orgdate:~6,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set ans1=K0BIZ311K0%yy%%mm%%dd%1.zip
set ans2=SS1001311%yy%%mm%%dd%0.zip

set GET_FILE1=%ans1%
set GET_FILE2=%ans2%
echo prompt
rem 7zを使って解凍作業
7za.exe e -y -pパスワード %GET_FILE1%
7za.exe e -y -pパスワード %GET_FILE2%