1

フォーム バッチ ファイルと呼ばれる非モーダル アラート ボックスが必要です。現在、vbscript を使用してモーダル アラート ボックスを作成しています。

>usermessage.vbs ECHO WScript.Echo^( "Generating report - this may take a moment." ^)
WSCRIPT.EXE usermessage.vbs

しかし、ユーザーの操作を待たずにスクリプト (レポートの生成) を続行したいと考えています。どうすればこれを達成できますか? それが vbscript であるかどうかは気にしません。(Windows XP で) バッチ スクリプトから動作させたいだけです。

4

2 に答える 2

2

現在のトリックに新しい要件がない簡単な答えは、startコマンドを使用してスクリプトをバッチ ファイルの実行から切り離すことです。

それは次のようになります。

>usermessage.vbs ECHO WScript.Echo^( "レポートを生成しています - これには少し時間がかかる場合があります。" ^)
WSCRIPT.EXE usermessage.vbs を起動します。
echo このテキストは、レポートを書くという大変な作業の代用です

唯一の違いはstart、 run を使用することwscriptです。これには、一時ファイルが現在のディレクトリに配置されたままになるという欠陥があり、最終的にはボックスを手動で閉じる必要があります。

どちらの問題も簡単に処理できます。

@エコーオフ
setlocal
msg="%TMP%\tempmsg.vbs" を設定します。
ECHO WScript.Echo^( "レポートを生成しています - これには少し時間がかかる場合があります。" ^) >%msg%
WSCRIPT.EXE を開始 /I /T:15 %msg%
echo このテキストは、レポートを書くという大変な作業の代用です
ping -n 5 127.0.0.1 >NULL
デル %msg% >NUL 2>&1

ここでは、一時スクリプトを%TMP%フォルダーに移動します。作業が終わったら忘れずに削除してください。echoおよびコマンドを使用しpingて時間を無駄にし、長いプロセスの実行を示しました。そして、オプション/I/Tオプションを使用しwscriptて、スクリプトが「対話的に」実行されることを確認し、スクリプトを実行できる最大時間を設定しました。

コマンド プロンプトでの実行時に@echo offsetlocal見た目がすっきりし、プロンプトの環境に `%msg% という名前が残らないようにします。

編集:コメントでの Johannes Rössel の批判setlocalは正しくありません。これがコマンド プロンプトで呼び出された場合setlocal、変数 msg は、プロンプトと、そのプロンプトから起動された他のバッチ ファイルおよびプログラムに表示されます。setlocal使い捨てのスクリプト以上のものを実際に書いている場合は、バッチ ファイルでローカル変数を分離するために使用することをお勧めします。

これは簡単に実証できます。

C:> タイプ seta.bat
@set A=SomeValue

C:> セット A
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Ross\Application Data

C:> seta.bat

C:> セット A
A=ある値
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Ross\Application Data

子:>
于 2009-04-25T01:43:24.190 に答える