はじめに
LinuxサーバーからWindowsPC、
またはWindowsPCからLinuxサーバーにファイルを毎日自動的にアップロード、
ダウンロードできたらいいなと誰しも一度は考えたことがあると思います。
そんな夢をバッチファイルとWindowsのタスクスケジューラで簡単に叶えることができます。
そう、WinSCPならね。
使用ツール
・WinSCP
・テキストエディタ
・タスク スケジューラー
手順
- バッチファイルを作る
- WinSCPのコマンドモードでの処理を記述したファイルを作る
- タスクスケジューラーに登録する
1. バッチファイルを作る
シンプルに、Linuxサーバー上にあるファイルをダウンロードするバッチファイルを作ります。
バッチファイルの名前は何でもいいですが、ここではgetFile.batにします。
テキストエディタを開いて以下のように記述しましょう。
"C:\Program Files (x86)\WinSCP\WinSCP.exe" /console /script="C:\batch\getFileByWinSCP.txt"
cd C:\batch\file
バッチファイルの中身解説
"C:\Program Files (x86)\WinSCP\WinSCP.exe" /console /script="C:\batch\getFileByWinSCP.txt"
WinSCPをコマンドモードで起動して、C:\batch\getFileByWinSCP.txt(後述)に書いてある処理を呼び出しています。Pathはデフォルトでこれだと思いますが、各自環境に合わせて変更してください。
cd C:\batch\file
バッチのカレントディレクトリをC:\batch\fileに移動しています。ダウンロードしたファイルがこのパスに配置されます。
2. WinSCPのコマンドモードでの処理を記述したファイルを作る
上記で作成したバッチファイルから呼び出すための、WinSCPのコマンドモードでの処理を記述したファイルを作ります。
ファイル名もこれまた何でもいいのですが、ここではgetFileByWinSCP.txtにしましょう。なんと拡張子も何でもいいです。
テキストエディタを開いて以下のように記述しましょう。
option batch on
open sftp://username:password@123.456.789.012:22
cd /backup
lcd "C:\batch\file"
get file.txt
exit
WinSCPのコマンドモードでの処理解説
option batch on
バッチモードで実行するので、~しますか?のような確認をしないようにします。
open sftp://username:password@123.456.789.012:22
SFTPのログイン。username:passwordは文字通りユーザー名とパスワード。
123.456.789.012:22は各自環境に合わせてIPアドレスとポート番号を入力してください。
cd /backup
サーバー側のカレントディレクトリを、ダウンロードしたいファイルのある所に移動しています。
環境に合わせて変えてください。
lcd "C:\batch\file"
ローカル側のカレントディレクトリを、ダウンロードしたいファイルを置く場所へ移動します。
get file.txt
file.txtというファイルをダウンロードします。ファイル名は各自変更してください。
exit
WinSCPを終了します。
3. タスクスケジューラーに登録する
Windowsのタスクスケジューラーを起動して、作成したバッチファイルをお好きな時間に実行するよう登録しましょう。
所感
これすごく便利だなーと思ったのが、サーバー側の処理とWindows側の処理が、一つのバッチファイルで完結するところですね。
コマンドモードでSFTPのログインしてしまえば↓みたいにmysqlの処理とかも呼べるので、
定時でサーバーに乗ってるMySqlのDBからCSVにデータを出力して、そのCSVをダウンロードするとかもできます。
call mysql -u username --password=password -e "`cat mysql_SQL.sql`" -s -N > sqlResult.csv
すごい。可能性しか感じない。