

こんにちは。ナガオカ(@boot_kt)です。
TeratermはマクロがあるのでTeratermだけで完結する処理はマクロを使います
しかし、batでftp-getしてからTeratermを起動したい場合はTeratermマクロだけでは完結しません
ってことで、この記事ではbatからTeratermを起動させるbatプログラムを解説します
ご注意!!
Teratermマクロには引数を渡せるのですが、この記事ではそういうことはやっていませんbatでTeratermマクロそのものを作成しています
この記事のザックリした内容
◆対象読者
- batからTeratermマクロを実行したい人
◆解決できるかも知れないお悩み
- batとTeratermマクロファイルの2本を管理するのが嫌
◆どうやって解決するか
- batの中でTeratermマクロを作って使い終わったら削除する
合わせて読みたい
batからTeratermを起動する
以下のソースコードを読んでもらえれば分かると思いますが、概要だけ説明します
ちょっと変わったことをやっています
SCP機能?
もしかしたら、TeratermのSCP機能を使えばTeratermマクロだけで完結するかも知れませんが、このbat書いたときはSCP機能を知らなかった
いや、今もSCP機能はよく知らないんだけど(笑)
サーバーが2台あることを想定してて、まず概要を言うと
処理の概要
- サーバーAにbatでFTP-put
- サーバーAにTeratermでtelnetログイン
- サーバーAからサーバーBへリモートログインしてmkdir
- サーバーAからサーバーBへリモートコピー
って感じです。
もうちょっと細かく書くとこんな感じ↓
※詳しくはソースコードを見てね
処理の流れ
- 【bat】batにファイルをドラッグ&ドロップ
- 【bat】bat起動
- 【bat】FTPの接続情報のテキストファイルを作成
- 【bat】サーバーAに、FTP接続
- 【ftp】binモードにする
- 【ftp】自分のホームにcd
- 【ftp】今日のフォルダを作成(フォルダ名はyymmdd)
- 【ftp】今日のフォルダにcd
- 【ftp】ファイルをputする
- 【bat】FTPの接続情報のテキストファイルを削除
- 【bat】サーバーAにログインするためのTeratermマクロを作成
- 【bat】Teratermマクロ起動
- 【Teraterm(A)】サーバーAに、telnet接続
- 【Teraterm(A)】自分のホームにcd
- 【Teraterm(A)】
- 【Teraterm(A)】サーバーBへリモートログイン
- 【Teraterm(B)】自分のホームにcd
- 【Teraterm(B)】今日のフォルダを作成
- 【Teraterm(B)】リモートログイン終了
- 【Teraterm(A)】今日のフォルダにcd
- 【Teraterm(A)】ファイルをサーバーBへリモートコピー
- 【Teraterm(A)】ログアウト&Teraterm終了
- 【bat】Teratermマクロのファイル削除
>> GitHub/gabekore/bat/bat_from_teraterm/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
rem ******************************************** rem bat_from_teraterm rem ◆概要 rem 1.サーバーAに、FTPでput rem →今日の日付のフォルダが無ければ作成 rem 2.サーバーAにteratermでログイン rem 3.サーバーAからサーバーBにリモートログイン rem 4.サーバーBに今日の日付のフォルダ作成 rem 5.サーバーAからサーバーBへリモートコピー rem ◆使い方 rem サーバーへ送りたいファイルをドラッグ&ドロップする rem ◆期待する引数: rem %1:コピーしたいファイル(←ドラッグ&ドロップ) rem 1個だけを想定 rem ◆前提条件 rem 拡張子ttlがttpmacro.exeに関連付けられていることが望ましいかも rem サーバー1とサーバー2のディレクトリ構成は同じとする rem ◆注意 rem 動作確認したものを紙に印刷してそれを見ながら再度打ちました rem その際、多少コードを変更していますが動作確認してません rem 変な不具合あるかも知れません rem ******************************************** @echo off rem 本batの起動ディレクトリをカレントディレクトリにする cd /d %~dp0 rem ******************************************** rem 変数(必要に応じて変更) rem ******************************************** rem -------------------------------------------- rem 全サーバー共通 rem %MYHOME%%TODAYFOLDER%がこのbatの処理場所になる rem -------------------------------------------- rem /からのフルパス、最後は/で終わること set MYHOME=/hoge/fuga/ set TODAYFOLDER=%date:~2,2%%date:~5,2%%date:~8,2% rem コピーしたいファイル名+拡張子のみ set PUTTARGET=%~n1%~x1 rem -------------------------------------------- rem FTPサーバー情報(=サーバー1) rem -------------------------------------------- set FTPTEXT=ftp.txt set FTPSERVER=ftpserver set ID=ftpid set PASS=ftppass rem -------------------------------------------- rem telnetサーバー1情報(=FTPサーバー) rem -------------------------------------------- set TERA_MACROFILE=teramacro.ttl set SVR1_HOSTADDR='server1' set SVR1_USERNAME='username1' set SVR1_PASSWORD='password1' rem シングルクォーテーション必要 set SVR1_PROMPT='PROMPT1#' rem -------------------------------------------- rem telnetサーバー2情報 rem -------------------------------------------- set SVR2_HOSTADDR='server2' rem 本batでは未使用だが、必要があれば使用する set SVR2_USERNAME='username2' rem 本batでは未使用だが、必要があれば使用する set SVR2_PASSWORD='password2' rem シングルクォーテーション必要 set SVR2_PROMPT='PROMPT2#' rem ******************************************** rem FTPの接続情報テキストを作成 rem ******************************************** rem 存在しない場合はエラーになるけど、別に問題なし del %FTPTEXT% rem 接続先 echo open %FTPSERVER% >> %FTPTEXT% rem IDとパスワードは空白入れたらダメ echo %ID%>> %FTPTEXT% echo %PASS%>> %FTPTEXT% rem binモードにする(必要なければ外す) echo bin >> %FTPTEXT% rem ひとまずMYHOMEに移動 echo cd %MYHOME% >> %FTPTEXT% rem 既に存在していてもmkdirする、エラーになるだろうけど無視 echo mkdir %TODAYFOLDER% >> %FTPTEXT% echo cd %TODAYFOLDER% >> %FTPTEXT% rem 一応一覧出しておく echo ls >> %FTPTEXT% rem ドラッグ&ドロップしたファイルをFTPへputする echo put %PUTTARGET% >> %FTPTEXT% rem FTP終了 echo bye >> %FTPTEXT% rem ******************************************** rem FTP接続 rem ******************************************** ftp -i -s:%FTPTEXT% rem ******************************************** rem FTPの接続情報テキストを削除 rem ******************************************** del %FTPTEXT% rem ******************************************** rem サーバー1にteratermでログインし、 rem サーバー2へリモートコピーする rem ******************************************** rem 存在しない場合はエラーになるけど、別に問題なし del %TERA_MACROFILE% rem ******************************************** rem teratermの接続マクロファイルを作成 rem ******************************************** rem teratermの接続マクロファイル内の変数 echo HOSTADDR = %SVR1_HOSTADDR% >> %TERA_MACROFILE% echo USERNAME = %SVR1_USERNAME% >> %TERA_MACROFILE% echo PASSWORD = %SVR1_PASSWORD% >> %TERA_MACROFILE% rem 接続コマンド作成 echo COMMAND = HOSTADDR >> %TERA_MACROFILE% echo strconcat COMMAND ':23 /NOSSH /T=1' >> %TERA_MACROFILE% rem 接続&ユーザーIDとパスワード入力 rem サーバーによってwaitするプロンプト名が違うなら変更すればいい echo connect COMMAND >> %TERA_MACROFILE% echo wait 'user name:' >> %TERA_MACROFILE% echo sendln USERNAME >> %TERA_MACROFILE% echo wait 'password:' >> %TERA_MACROFILE% echo sendln PASSWORD >> %TERA_MACROFILE% rem -------------------------------------------- rem サーバー1での処理 rem -------------------------------------------- rem 接続できたら、MYHOMEへ移動 echo wait SVR1_PROMPT >> %TERA_MACROFILE% echo sendln 'cd %MYHOME%' >> %TERA_MACROFILE% rem 一応一覧出しておく echo wait SVR1_PROMPT >> %TERA_MACROFILE% echo sendln 'ls -la' >> %TERA_MACROFILE% rem サーバー2へリモートログインする echo wait SVR1_PROMPT >> %TERA_MACROFILE% echo sendln 'rlogin %SVR2_HOSTADDR%' >> %TERA_MACROFILE% rem -------------------------------------------- rem サーバー2での処理 rem -------------------------------------------- rem 接続できたら、MYHOMEへ移動 echo wait SVR2_PROMPT >> %TERA_MACROFILE% echo sendln 'cd %MYHOME%' >> %TERA_MACROFILE% rem 一応一覧出しておく echo wait SVR2_PROMPT >> %TERA_MACROFILE% echo sendln 'ls -la' >> %TERA_MACROFILE% rem 今日のフォルダを作成する rem 既に存在していてもmkdirする、エラーになるだろうけど無視 echo wait SVR2_PROMPT >> %TERA_MACROFILE% echo sendln 'mkdir %TODAYFOLDER%' >> %TERA_MACROFILE% rem 今日のフォルダさえ作ればexit echo wait SVR2_PROMPT >> %TERA_MACROFILE% echo sendln 'exit' >> %TERA_MACROFILE% rem -------------------------------------------- rem サーバー1での処理(2回目) rem -------------------------------------------- rem カレントディレクトリはMYHOMEのままのはずなので、 rem 今日のフォルダにcdする rem ※今日のフォルダはFTP-put時にやっている echo wait SVR1_PROMPT >> %TERA_MACROFILE% echo sendln 'cd %TODAYFOLDER%' >> %TERA_MACROFILE% rem サーバー2へリモートコピー echo wait SVR1_PROMPT >> %TERA_MACROFILE% echo sendln 'rcp %PUTTARGET% %SVR2_HOSTADDR%:%MYHOME%%TODAYFOLDER%/.' >> %TERA_MACROFILE% rem コピーさえ終わればexit echo wait SVR1_PROMPT >> %TERA_MACROFILE% echo sendln 'exit' >> %TERA_MACROFILE% rem -------------------------------------------- rem teratermマクロの終了コマンド rem -------------------------------------------- echo end >> %TERA_MACROFILE% rem ******************************************** rem teratermマクロ実行 rem ******************************************** %TERA_MACROFILE% rem teratermマクロ削除 del %TERA_MACROFILE% exit /b 0 |
広告
参考書籍
プログラミング のレッスンに興味がある方、レッスン内容を聞いてみたい方、なんなりとお問い合わせください。
無料体験レッスンもありますのでお気軽にどうぞ!!!