Stdinの使い方

このQ&Aのポイント
  • WindowsXP SP2環境でのStdinの使い方について質問です。プログラムAは標準入力から一行の入力を待ち、それを出力するだけのものです。プログラムBはWSHスクリプトで、プログラムAを呼び出して入力させようとしていますが、エラーが発生してしまいます。
  • 具体的には、Bの中でAを呼び出すためにWScript.CreateObjectを使用し、Execメソッドを実行しています。しかし、oExec.StrInがnullまたはオブジェクトではないというエラーメッセージが表示されます。
  • なぜこのエラーが発生するのか、どうすれば正常に動作させることができるのか、ご教示ください。
回答を見る
  • ベストアンサー

Stdinの使い方

環境はWindowsXP SP2です。 標準入力から一行の入力を待つプログラムAが有ります。 それをWSHスクリプトBから入力させてやりたいです。 仮に、そのAを <A.vbs> s = WScript.Stdin.Readline WScript.Echo "#" & s とします。問題なく動作します。 そしてはBは <B.js> var WshShell = WScript.CreateObject("WScript.Shell"); var oExec = WshShell.Exec("cscript a.vbs"); oExec.StrIn.Write("abcdef"); としました。しかし Microsoft JScript runtime error: 'oExec.StrIn' is null or not an object なるエラーで失敗します。 どうしてでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

× StrIn ○ StdIn http://msdn.microsoft.com/en-us/library/yzzwsz3t(v=vs.84).aspx

remokon
質問者

お礼

返答ありがとうございます 問題解決しました。 恥ずかしいかぎりです。 今後もおねがいします

関連するQ&A

  • 前の入力が消えない

    JScriptで次の関数を作りました。 function foo(arg) {  var WshShell = new ActiveXObject("WScript.Shell");  var oExec = WshShell.Exec("abc.exe");    oExec.StdIn.Write(arg);  oExec.StdIn.Close();    var s = oExec.StdOut.ReadAll();    oExec.terminate();    return s; } 待機などの処理は、実際にはありますが、ここでは省いてあります。 これはabc.exe命令を実行し、その標準入力に文字列argを与え、その標準出力を得ます。 一度目は問題ありません。 二度目は、一度目の文字列に追加した結果が出ます。つまり 一度目 arg="FOO" 結果は、希望通り 二度目 arg="BAR" 結果は、まるでarg="FOOBAR"であるように動作する。 対症療法でも良いので、何か方法はないでしょうか。

  • cscriptで文字変数 に ” を入力するには

    お世話になります。 早速ですが、質問があります。 c:\test\test.exe -path "D:\data" -file "aaa.txt" -flag a というコマンドをcscript のプログラムから起動したいのですが、コマンド文字列を文字列変数に代入する方法 がありましたら、教えてください。 Cscript test.vbs %1 ======================================= Dim WshShell Dim oExec Dim Cmd Dim File File = WScript.Arguments(0) Cmd = "c:\test\test.exe -path "D:\data" -file "a.out" -flag " & File                     ↑↑↑↑                  これができません? Set WshShell = CreateObject("WScript.Shell") set oExec = WshShell.Exec(Cmd) Do While oExec.Status = 0 Wscript.Sleep 100 Loop "も文字列に入力するには、どのようにすればいいでしょうか? ご意見、アドバイスよろしくお願いいたします。

  • CScript vbsファイル実行 途中で止めたい

    Cscript でVBSファイルを実行するとコマンドプロンプトの画面が立ち上がって処理がはじまりますが、 実行中にEnterキーをおさないと次の処理にいかないように、プログラムを書きたいのですが、 書き方わかる方いらっしゃいましたら、教えてください。Enterキーでなくても構いません。 例えばaaa.vbsの中で、大きく二つ処理があって、(1)の処理→(2)の処理の順番だった時に (1)の処理→(コマンドプロンプト上で)止める、自分でなにかボタン押す→(2)の処理みたいな感じにしたいと思っています。 自分が試したのが、以下です、駄目でした。 WScript.StdInを使ったのですが、これを一度使った後に、Wscript.Echoを使うと、 次のWScript.StdInが使えなくて意味がありませんでした。 WScript.StdIn(入力表示されてとまった) → Wscript.Echo "テスト" →WScript.StdIn(入力表示なく、とまらない)

  • WSHでシャットダウン

    WSH(JScript)でシャットダウンする方法を教えてください。 OSは2000とXPです。 XPだけなら以下の方法で出来るようですが、 2000で実行するとエラーになってしまいます。 var ws = new ActiveXObject("WScript.Shell"); ws.Run("shutdown -s -f");

  • JP1からvbs(PSExec)が起動できない

    突然失礼します。 以下のサーバーAにあるvbsを、JP1から起動しようとしていますが、うまく起動しないので、もし原因が分かる方がいたら、ご教授願いたいです。 起動しようとしているサーバーAの「test.vbs」は、簡単に言うと、PsExecを利用して、サーバーBの「hoge.bat」を実行する内容です。 ***test.vbs*** Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "PsExec.exe サーバーBIPアドレス -u 実行ユーザ -p 実行ユーザーパスワード cmd" WshShell.AppActivate "cmd " WScript.Sleep 3000 WshShell.SendKeys "cd C:\" WshShell.SendKeys "{enter}" WshShell.SendKeys "hoge.bat" WshShell.SendKeys "{enter}" WScript.Sleep 10000 WshShell.AppActivate "cmd" WshShell.SendKeys "exit" WshShell.SendKeys "{enter}" ************************ 上記バッチを手動で実行するとうまくいくのですが、 JP1で起動しようとすると、うまくいきません。 そもそもPsExecが実行出来ていないかも。。。。 宜しくお願いします。

  • javascriptでのローカルパスの指定の仕方

    javascript(wsh)のローカルパスの記述で質問です いままでファイルを実行する場合に、こんな感じで記述してました。 var WSHShell = new ActiveXObject("WScript.Shell"); WshShell.run("C:\\wsh\\act\\kyoten1.js"); のように実行ファイルを直接指定していました。 今後、ファイルのフルパス名を取得して代入したいのです fullpath = WScript.ScriptFullName; WshShell.run(fullpath); → うまくいきません・・・ どのようにローカルのパス名を記述すればよいのでしょうか? 大変恐縮なのですが、お分かりの方ご教授いただけると幸いです。

  • vbsの保存方法が分からない

    Wscript.StdOut.Write "Height(m) = " H = WScript.StdIn.ReadLine Wscript.StdOut.Write "Weight(kg) = " W = WScript.StdIn.ReadLine BMI = W / (H * H) Wscript.StdOut.Write "BMI = " & BMI & vbLf BMIの上記コードをコマンドプロンプトで書き込み practice に保存しようとすると なぜか bmi とだけ表記されて本のような bmi.vbs にならない。 従い、これを cscript.bmi.vbs で実行しようとエンターすると スクリプト C: ¥practice¥bmi.vbs 行:1 文字:1 コード:80070006 ソース:(null) となり、実行できない。 practice に保存するとき、 ファイル名 の蘭に *.txt を消して bmi.vbs と記入している。これが間違いですか?

  • キー操作 (WSH:コピー&ペースト)

    ホームページ上のデータをクリップボードに取り込んで メモ帳に写したいです。 キー操作でのコピー&ペーストがうまくいきません。 どこがいけないのでしょうか(WSHを使ってます)。 set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "^A" '「Ctrl」を押しながら「A」を押す WshShell.SendKeys "^C" '「Ctrl」を押しながら「C」を押す WSHShell.Run "notepad.exe" 'メモ帳を開く WshShell.SendKeys "^V" '「Ctrl」を押しながら「V」を押す よろしくお願いします。

  • WSHで、レジストリを一気に消去したい

    VBスクリプトにて、WSHプログラミングを行っております。 レジストリを消去する場合、例えば Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.RegDelete ("消したいレジストリ") とプロプラミングするかと思いますが、 レジストリ1個ずつではなく、とあるフォルダ以下に含まれる、 全てのフォルダ及びレジストリを一気に消去したいと考えています。 (例えば、 "HKLN\SYSTEM\CurrentControlSet\Control\Class"の フォルダ以下に含まれる、フォルダ及びレジストリを 全て消去したい) このようなことを実現するには、VBSでどのようなコードを 書けばよいのでしょうか。ご教授よろしくお願いします。

  • 「UNCパスはサポートされません」の回避方法

    VBSを作成していますが、下記のようにエラーとなります。 このVBSファイルは、ネットワークファイルサーバー上に置き、実行しています。 自分のパソコンのディスク内にVBSファイルを置き、実行すると、エラーにはなりません。 サーバー上にファイルを置く理由は、社内のどのパソコンからでも実行出来るようにしたいからです。 ネットワークのフォルダを「P」ドライブへ割り当てています。 しかし、\\Comdoc\work\My Documents\SETUP\win2000とサーバー名称を指定しても同じエラーが返されます。 「UNCパスはサポートされません」とありますが、どのように書き直したら良いのかその方法がありましたら教えてください。 Windows2000です。 --エラー内容-- 現在のディレクトリのパスとして '\\Comdoc\work\My Documents\SETUP\win2000' で CMD.EXE を開始しました。UNC パスはサポートされません。Windows ディレクトリを使用します。 --プログラム内容-- Dim WSH Set WSH = WScript.CreateObject("WScript.Shell") prnad prnabat Sub prnad() exeStr = "regsvr32 /s C:\setup\netmgmt\prnadmin.dll" set oExec = WSH.exec(exeStr) Do While oExec.Status = 0 WScript.Sleep 100 Loop End Sub Sub prnabat() spath = """P:\My Documents\SETUP\win2000""" WSH.Run "cmd /k spath & addprn.bat" End Sub

専門家に質問してみよう