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

VBScriptを使用したプログラムを作成しています。

1.プログラム起動
2.コマンドプロンプトウィンドウを開く(開いている間、内部処理実行)
3.内部処理で発生したメッセージをコマンドプロンプトウィンドウに表示する。
  (「○○ファイル処理中です。」等)
4.ユーザー側でコマンド処理を実行もできる(Copy とか md 等)
5.コマンドプロンプトウィンドウが閉じられたら処理を終了する。

というプログラムを作成したいのです。

内部処理の方はもう出来上がっているのですが、後から仕様が追加になりました。
内部処理は数時間かかるので、今どのような状況かが確認したいとのことなのです。
msgboxでは「OK」をクリックするまで止まってしまうことになるので使用できません。
また、メッセージは10回分くらいは表示したままにしたいです。

無理ならば4は除いても構いません。


Set wshShell = CreateObject("WScript.Shell")
wshShell.Run ("cmd.exe /c",,True)

では、コマンドプロンプトウィンドウが開いている間、処理が止まってしまいますし、
最後のTrueをFalseに変える または Run をExec に変えるとウィンドウが一瞬で閉じてしまいます。

どうぞよろしくお願いいたします。

質問者からの補足コメント

  • 3/4 9:30時点での補足です。

    kmee様

    紛らわしい質問で申し訳ありません。

    大雑把にいうと、2~5の機能を持ったプログラム(仮にaaa.vbsとします)を作成したいのです。

    >1. 起動方法は?
    1.で起動するのは、そのaaa.vbsです。
    現時点では、aaa.vbsは、PCの起動時にBATファイルより CScript "aaa.vas(フルパス表記)" で起動します。
    ですが、これですと4.の機能を実現できないので、困っています。

    >2.コマンドプロンプトは 1. で開く、ということですか?
    その通りです。

    >3. VBScriptとコマンドプロンプトの関係は?
    > コマンドプロンプトでCSCRIPTでVBSCriptを実行すれば、wscript.echo とかでコマンドプロンプトに出力になりますが。
    これもおっしゃる通りです。

    続きます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/03/04 09:31
  • 続きです。

    >4.VBScript実行中にコマンド入力したい、ということですか?
    > それなら、VBS実行とは別のコマンドプロンプトを実行すればいいのでは?
    事情があり、ユーザーに他のウィンドウを開いたり、他のウィンドウへ移動する操作をさせたくありません。

    >なぜ、/Cを付けているのですか?
    機能を間違えて覚えていました。ご指摘いただかなかったら、ずっと間違えていたと思います。
    ありがとうございました。


    「5.コマンドプロンプトウィンドウが閉じられたら処理を終了する。」について追記します。
    現行の、CScript "aaa.vas(フルパス表記)" の起動では、ウィンドウを閉じた時点でaaa.vbsも強制終了してしまいます。
    コマンドプロンプトウィンドウが閉じられたら、aaa.vbs内の終了処理を行ってから終了するようにしたいです。

    引き続きよろしくお願いいたします。

      補足日時:2020/03/04 09:34
  • 3/10 9:30時点での補足です。

    依頼元と相談の結果、aaa.vbsから出力されるメッセージ用のウィンドウと、
    ユーザーが使用するコマンドプロンプトウィンドウを別にすることになり、
    現行の状態でOKとなりました。

    ありがとうございました。

      補足日時:2020/03/10 09:24

A 回答 (2件)

1〜5それぞれでよくわからないことがあります。


1. 起動方法は?
2.コマンドプロンプトは 1. で開く、ということですか?
3. VBScriptとコマンドプロンプトの関係は?
 コマンドプロンプトでCSCRIPTでVBSCriptを実行すれば、wscript.echo とかでコマンドプロンプトに出力になりますが。
4.VBScript実行中にコマンド入力したい、ということですか?
 それなら、VBS実行とは別のコマンドプロンプトを実行すればいいのでは?


> wshShell.Run ("cmd.exe /c",,True)

cmd に /Cオプション (コマンドを実行したら終了する)を付けて実行しています。
その「コマンド」が無いから、「コマンド」はすぐに終了します。よって、コマンドプロンプトも終了します。
なぜ、/Cを付けているのですか?
「cmd.exe 引数」で検索しましょう。
この回答への補足あり
    • good
    • 0
この回答へのお礼

色々とありがとうございました。
kmee様の書き込みで、自分の勘違いに気づいたり発想の転換に至りました。

お礼日時:2020/03/10 09:13

これ、ただどこまで進捗しているかをコマンドプロンプト上で確認できるようにしたいということが目的ですよね?



であるならば、内部処理を実行元となるvbsで実行するのではなく、内部処理を断続的にわけたvbsを用意し、コマンドプロンプトからそのvbsを実行するようにすればいいのではないでしょうか。
 ・実行元は各vbsを実行し、タイミングごとに状況をechoするbat
 ・各vbsで段階的にバッチを処理

長時間を要するバッチ処理として表示されているものなのに、そこに任意のコマンドを実行できていいのでしょうか?
そんなことをユーザーが任意にコマンドプロンプトを起動してがちゃがちゃやるならまだしも、『バッチ処理』として許可してしまったら、バッチ処理で処理した途中経過のものを壊せるのでは?
    • good
    • 0
この回答へのお礼

アドバイスをありがとうございました。
今回は取り入れることができませんでしたので、次回の時には参考にさせていただきます。

お礼日時:2020/03/10 09:11

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

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


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