プロが教えるわが家の防犯対策術!

Eドライブにて「e.bat」でCドライブの"C:\Program Files (x86)"\teraterm\ttpmacro.exeを起動するにはどうしたらよいのでしょうか。

Eドライブにて「e.bat」を行うと「E:\list_e.txt」を読み込み"C:\Program Files (x86)"\teraterm\ttpmacro.exeが起動するはずが起動しません。しかし、Cドライブの「c.bat」は起動し動作します。
==========
(e.bat)
=========
set macro="C:\Program Files (x86)"\teraterm\ttpmacro.exe
for /f %%i in (E:\list_e.txt) do %macro% /V /I %%i
-----------
E:\list_e.txt中身
cisco1.ttl
cisco2.ttl
-----------

==========
(c.bat)
==========
set macro="C:\Program Files (x86)"\teraterm
cd %macro%
for /f %%i in (E:\list_c.txt) do ttpmacro.exe /V /I %%i
-----------
E:\list_c.txt中身
cisco1.ttl
cisco2.ttl
-----------

A 回答 (2件)

ちょっと時間があったので試してみました。



https://ttssh2.osdn.jp/manual/ja/macro/commandli …
にあるように、
%macro% /V /I cisco1.ttl
だと、 ttpmacro.exe のあるディレクトリを基準にした相対パスでcisco1.ttl を探します。
つまり
C:\Program Files (x86)\teraterm\
に cisco1.ttl を置く必要があります。

その場所に置いたら、ちゃんと実行されました。


ファイルの置き場所はあってますか?

c.batを実行するときは C:\Program Files (x86)\teraterm\ に
e.batを実行するときは E:\ に
といったように、 cisco1.ttl の置き場所を変えたりはしていませんね?


○ あるいは、 E:\list_e.txt の中身をフルパスいたら、ちゃんと実行されました
E:\cisco1.ttl
といった具合に。


○実験したのは、 messagebox ( https://ttssh2.osdn.jp/manual/ja/macro/command/m … ) を表示するだけのマクロです。
これでは、c.batとe.batに違いは出ませんでした。(両方とも正常に動作)

○ このことから、「作業ディレクトリを移動」の部分が効いているように思います。
そういう目線でマクロのマニュアルを眺めると、絶対パスでない場合(ファイル名だけ指定等)にどこを基準にするかが、結構バラバラです。

cisco1.ttl,cisco2.ttlの中で、ファイルへのアクセスをしていませんか?
include とか fileopenとかは使ってないですか?

例えば、ファイル名の指定を全部絶対パスにしたらどうなりますか?
    • good
    • 0

動作が違うバッチを実行しているのですから、実行結果が違っても何ら不思議はありません。



e.batは 「**E:\list_e.txt**に書かれた文字列を、**%macro%**の引数にして実行」
c.batは 「**作業ディレクトリを移動してから** **E:\list_c.txt**に書かれた文字列を、**ttpmacro**の引数にして実行」

これだけでも
・作業ディレクトリの違いが原因
・読み込むテキストファイルが原因
・実行コマンドが原因(変数macroの定義、または展開が原因)
・引数の指定方法が原因
が考えられます。


> 起動するはずが起動しません

それは具体的にどんな状況なのですか?
・実行自体されていない
・実行されてエラーになる(具体的なエラーメッセージは?)
では対処方が違います。

例えば、forを使わない
set macro="C:\Program Files (x86)"\teraterm\ttpmacro.exe
%macro% /V /I cisco1.ttl
%macro% /V /I cisco2.ttl
ではどうなのでしょうか?

/V はウィンドウを隠す、/Iはアイコン状態での実行ですから、開発時には両方はずしたらどうでしょう。
少なくとも、ウィンドウが表示されるかどうかで、実行されているかどうかくらいは確認できると思います。
    • good
    • 0

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