[Windows]batからTeratermを起動させよーーーぜ!!

bat teraterm

 

 

こんにちは。ナガオカ(@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台あることを想定してて、まず概要を言うと

処理の概要
  1. サーバーAにbatでFTP-put
  2. サーバーAにTeratermでtelnetログイン
  3. サーバーAからサーバーBへリモートログインしてmkdir
  4. サーバーAからサーバーBへリモートコピー

って感じです。

もうちょっと細かく書くとこんな感じ↓
※詳しくはソースコードを見てね

処理の流れ
  1. 【bat】batにファイルをドラッグ&ドロップ
  2. 【bat】bat起動
  3. 【bat】FTPの接続情報のテキストファイルを作成
  4. 【bat】サーバーAに、FTP接続
  5.  

  6. 【ftp】binモードにする
  7. 【ftp】自分のホームにcd
  8. 【ftp】今日のフォルダを作成(フォルダ名はyymmdd)
  9. 【ftp】今日のフォルダにcd
  10. 【ftp】ファイルをputする
  11.  

  12. 【bat】FTPの接続情報のテキストファイルを削除
  13. 【bat】サーバーAにログインするためのTeratermマクロを作成
  14. 【bat】Teratermマクロ起動
  15.  

  16. 【Teraterm(A)】サーバーAに、telnet接続
  17. 【Teraterm(A)】自分のホームにcd
  18. 【Teraterm(A)】
  19. 【Teraterm(A)】サーバーBへリモートログイン
  20.  

  21. 【Teraterm(B)】自分のホームにcd
  22. 【Teraterm(B)】今日のフォルダを作成
  23. 【Teraterm(B)】リモートログイン終了
  24.  

  25. 【Teraterm(A)】今日のフォルダにcd
  26. 【Teraterm(A)】ファイルをサーバーBへリモートコピー
  27. 【Teraterm(A)】ログアウト&Teraterm終了
  28.  

  29. 【bat】Teratermマクロのファイル削除

>> GitHub/gabekore/bat/bat_from_teraterm/

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

 

広告




 

参考書籍

 


 

プログラミング のレッスンに興味がある方、レッスン内容を聞いてみたい方、なんなりとお問い合わせください。
無料体験レッスンもありますのでお気軽にどうぞ!!!

 

 

bat teraterm

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

Windows/Mac/Linuxを使う現役システムエンジニア&プログラマ。オープン系・組み込み系・制御系・Webシステム系と幅広い案件に携わる。C言語やC#やJava等数多くのコンパイラ言語を経験したが、少し飽きてきたので、最近はRubyやPython、WordPressなどのWeb系を修得中。初心者向けのプログラミング教室も運営中。オンライン・対面・出張等でプログラミングをレッスンします。