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

VbscriptにてTeraterm のマクロを実行したいのですが、「CreateObject」を複数使っている為か
「objWshShell.Run」でRunメソッドエラーがでます。
やりたいことは、ReadLineにて読み込んだ、「c:\list.txt」を 「objWshShell.Run」でtpmacro.exe 第一引数にして実行したいです。

Dim objfs,objWshShell
Dim file
Dim strLine

Set objfs = CreateObject("Scripting.FileSystemObject")
Set file = objfs.OpenTextFile("C:\list.txt", 1)
Set objWshShell = WScript.CreateObject("WScript.Shell")

Do until file.AtEndOfStream
strLine = file.ReadLine
objWshShell.Run="""C:\Program Files (x86)\teraterm\ttpmacro.exe strLine"""
Set objWshShell = Nothing
Loop

file.Close

A 回答 (3件)

【不具合1】


>「objWshShell.Run」でRunメソッドエラーがでます。
Runメソッドの使い方が間違っています。
以下を参考にしてください。
https://msdn.microsoft.com/ja-jp/library/cc36442 …

【不具合2】
ttpmacro.exeへの引数の渡し方が間違っている。
"C:\Program Files (x86)\teraterm\ttpmacro.exe" 引数

【不具合3】
ループの中で、
Set objWshShell = Nothing
としている為、二回目以降の「objWshShell」が存在しない。


こんな感じで
Dim objfs,objWshShell
Dim file
Dim strLine

Set objfs = CreateObject("Scripting.FileSystemObject")
Set file = objfs.OpenTextFile("C:\list.txt", 1)
Set objWshShell = WScript.CreateObject("WScript.Shell")

Do until file.AtEndOfStream
strLine = file.ReadLine
objWshShell.Run """C:\Program Files (x86)\teraterm\ttpmacro.exe"" " & strLine
Loop
Set objWshShell = Nothing
file.Close
    • good
    • 0

objWshShell.Runするならイコールじゃなくて引数でわたすのでは?


また、strLineをクォーテーションのなかに入れても展開されないので
外側で連結しないといけないかも

objWshShell.Run("""C:\Program Files (x86)\teraterm\ttpmacro.exe”” ”+strLine)
またstrLineで読まれるのはttlファイルですか?
ttlファイル自体フルパスでかいて、クォーテーションでくくる必要があるかも

objWshShell.Run("""C:\Program Files (x86)\teraterm\ttpmacro.exe”” ""”+strLine+"""")
    • good
    • 0

VB Script触ったコトはありませんが……



>「objWshShell.Run」でRunメソッドエラーがでます。

具体的にどんなエラーです?

>objWshShell.Run="""C:\Program Files (x86)\teraterm\ttpmacro.exe strLine"""

「変数strLineの中身の文字列」ではなく「strLine」という文字列を第1引数に渡していると思いますが、そこら辺は期待値通りなんですか?
それともVB Scriptは文字列中に変数名を記述すると勝手に置き換えしてくれるんでしょうか?

ついでに…上記の指定だと実行しようとしているのは、
"C:\Program Files (x86)\teraterm\ttpmacro.exe strLine"
で、拡張子が「.exe strLine」というファイル。ということになりますが?
ダブルクォーテーションで指定するのはそういう意味ですけどどうですか?

C:\ProgramというプログラムにFiles (x86)\teraterm\ttpmacro.exe strLineという3個の引数を渡しているのか、
C:\Program Filesというプログラムに(x86)\teraterm\ttpmacro.exe strLineという2個の引数を渡しているのか、
C:\Program Files (x86)\teraterm\ttpmacro.exeというプログラムに1個の引数を渡しているのか、
全体をダブルクォーテーションが囲った場合にどうやって判別しましょう?
# 判別する為に「半角スペースを含むフルパス名」をダブルクォーテーションで囲っているのではないですか?

objWshShell.Run="""C:\Program Files (x86)\teraterm\ttpmacro.exe"" " & strLine
または、
objWshShell.Run="""C:\Program Files (x86)\teraterm\ttpmacro.exe"" " + strLine
なんじゃないでしょうか?
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A