アプリ版:「スタンプのみでお礼する」機能のリリースについて

teratermマクロを使い、機器の状態を取得しログに残すというマクロを作成しています。

マクロの大まかな流れは、
strconcat CURRENTPATH4 '\コマンド\cmd-list(CiscoSW).txt'
で投入コマンドを定義して、

機器にログイン、
定義されたコマンドを流し、
機器からログアウト、
踏み台サーバからもログアウト

logフォルダの中に自動的に情報採取ログが作成されているという流れです。




機器にログインした後に、コマンドファイルを開きたいと考えています。
exac 'notepad ..\コマンド\cmd-list(CiscoSW).txt'

としましたが、コマンドが表示されません。
notepadの後にフルパスでコマンドを記載すれば開くのは確認しましたが、
作業者によってマクロフォルダを置く場所が異なるので、それはしたくないです。

また、cmd-list(CiscoSW).txtをマクロ実行ファイルと同じフォルダに置いて、
exac 'notepad cmd-list(CiscoSW).txt'
とすれば、開くことを確認しましたが、マクロファイルとログファイルと実行コマンドは別フォルダに置いておきたいです。

notepadの後に相対パスで指定する方法を色々調べましたが分かりません。
どのようにすれば、別フォルダにあるcmd-list(CiscoSW).txtを開くことができるでしょうか?

以下にマクロの本体を記します。
浅薄な私に知恵を貸してください。








;;変数定義とディレクトリ情報取得、コマンドリスト定義
gettime logtime "_%Y%m%d_%H%M%S"
PASSWORD = 'SSSSSSSSSSSSSS'
prompt1 = '>'
prompt2 = '#'
getdir CurrentDir
CURRENTPATH1 = CurrentDir
CURRENTPATH2 = CurrentDir
CURRENTPATH3 = CurrentDir
CURRENTPATH4 = CurrentDir
strconcat CURRENTPATH4 '\コマンド\cmd-list(CiscoSW).txt'
CMDPATH = CURRENTPATH4
;;
;;
;;
;;踏み台サーバに自動ログイン
connect 'XXX.XXX.XXX.XXX:YY /nossh /T=1'
wait 'ogin:'
sendln 'UUUUUUUUUUUUUUU'
wait 'assword:'
sendln 'RRRRRRRRRRRRRRR'
sendln ' '
sendln ' '
;;
;;
;;
;;listbox表示
strdim HOSTNAME 1
HOSTNAME[0] = 'CiscoのIPアドレス'
;;
;;
;;
;; 接続先ホスト選択
listbox '接続するホストを選択して下さい' '接続ホスト選択' HOSTNAME
if result >= 0 then
HOSTADDR = HOSTNAME[result]
else
end
endif
;;
;;
;;
;;
;; 接続用コマンド組立て
send 'telnet '
send HOSTADDR
sendln ' '
;;
;;
;;
;; messagebox表示
messagebox 'このホストの状態確認開始' '状態確認コマンド開始'
;;
;;
;;
;; 流し込むコマンドの表示
exac 'notepad ..\コマンド\cmd-list(CiscoSW).txt'
;;
;;
;;
;; messagebox表示
messagebox 'このコマンドを流します' 'このコマンドを流します'
;;
;;
;;
;;これまでの作業ログを閉じます
logclose
;;
;;
;;
;;ログ取得フォルダなければ作成
strconcat CURRENTPATH1 '\log\'
foldersearch CURRENTPATH1
if result = 0 then
foldercreate CURRENTPATH1
endif
;;
;;
;;
;;ログ取得開始
LOGPATH = CURRENTPATH1
strconcat LOGPATH '状態確認_'
strconcat LOGPATH HOSTADDR
strconcat LOGPATH logtime
strconcat LOGPATH '.log'
logopen LOGPATH 0 0 0 0
;;
;;
;;
;;機器にログイン
wait 'Password:'
sendln PASSWORD
wait prompt1
sendln 'enable'
wait 'Password:'
sendln PASSWORD
wait prompt2
;;
;;
;;
;;コマンドファイルの定義
FILE = CMDPATH
;;
;;
;;
;;コマンドファイルの読み込み
fileopen parade FILE 0
while 1
filereadln parade LINE
if result = 1 break
flushrecv
sendln LINE
waitregex prompt2
endwhile
fileclose parade
;;
;;
;;
;;コマンド終了して踏み台サーバに戻る
sendln 'exit'
wait 'AAAAAAAAAAAAAAA'
sendln 'exit'
;;
;;
;;
;;ログの終了
logclose
;;
;;
;;
;; messagebox表示
messagebox '終了' '状態確認コマンド終了'
;;

A 回答 (1件)

相対パスを使うのなら、「基準となる絶対パスはどこか?」が重要です。


あなたの考えている「 ..\コマンド\cmd-list(CiscoSW).txt」の基準ディクトリはどこなのですか?



> cmd-list(CiscoSW).txtをマクロ実行ファイルと同じフォルダに置いて、
> exac 'notepad cmd-list(CiscoSW).txt'
> とすれば、開くことを確認しました

そうだとするなら、
..\コマンド\cmd-list(CiscoSW).txt は、

親フォルダ|
+マクロ実行ファイルのフォルダ\
→| マクロ実行ファイル
+「コマンド」\
→| 「cmd-list(CiscoSW).txt」

というツリー構造での cmd-list(CiscoSW).txt へのパスということになります。
(マクロ実行ファイルのフォルダ と 「コマンド」が同じ階層)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!