2009-04-16 22 views
1

バッチファイルと呼ばれる非モーダルアラートボックスが必要です。バッチスクリプトの非モーダル通知ボックス

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

をしかし、私はユーザーとの対話を待たずにスクリプト(レポートを生成)を続行したいと思います。現在、私は、モーダル警告ボックスを作成するVBScriptを使用しています。どうすればこれを達成できますか?私はそれがvbscriptかどうか気にしない - 私はちょうどバッチスクリプト(Windows XPで)からそれを動作させたい。

答えて

2

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

唯一の違いは wscriptを実行するために startを使用している
 
>usermessage.vbs ECHO WScript.Echo^("Generating report - this may take a moment." ^) 
start WSCRIPT.EXE usermessage.vbs 
echo This text is a proxy for the hard work of writing the report 

:次のようになります

。これは、現在のディレクトリに一時ファイルが置かれていて、最終的に手動で解除する必要があるという欠点を抱えています。

両方の問題が扱いやすい:

ここ
 
@echo off 
setlocal 
set msg="%TMP%\tempmsg.vbs" 
ECHO WScript.Echo^("Generating report - this may take a moment." ^) >%msg% 
start WSCRIPT.EXE /I /T:15 %msg% 
echo This text is a proxy for the hard work of writing the report 
ping -n 5 127.0.0.1 >NULL 
del %msg% >NUL 2>&1 

、私は%TMP%フォルダに一時的なスクリプトを上に移動し、我々はそれで終わったときにそれを削除することを忘れないでください。 echopingコマンドを使用して、長時間のプロセス実行を実証する時間を無駄にしました。そして、/I/Tのオプションをwscriptに使用して、スクリプトが「インタラクティブに」実行されていることを確認し、スクリプトを実行できる最大時間を設定しました。

@echo offsetlocalは、コマンドプロンプトで実行するときれいに見え、プロンプトの環境に `%msg%という名前を残さないようにします。

編集:ヨハネス・レセルのコメントでのsetlocalの批判は間違っています。これがコマンドプロンプトで呼び出された場合は、setlocalがなくても、msgとそのプロンプトから起動された他のバッチファイルとプログラムにmsgが表示されます。バグファイル内のローカル変数を分離するために、setlocalを使用することをお勧めします。

これは簡単に証明することができる。

 
C:> type seta.bat 
@set A=SomeValue 

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

C:> seta.bat 

C:> set A 
A=SomeValue 
ALLUSERSPROFILE=C:\Documents and Settings\All Users 
APPDATA=C:\Documents and Settings\Ross\Application Data 

C:> 
+1

申し訳ありませんが、あなたはcmd.exeのは、* nixの殻のようにあまりにも多くあると仮定されています。コマンドプロンプトで呼び出される各バッチファイルは、その非常にcmd.exeのコピーによって解釈され、実際には他のコマンドの環境を変更することができます。それがsetlocalが追加された理由です。ただし、エクスプローラからバッチファイルが呼び出された場合は正しいです。これはDOS 1.0とCOMMAND.COMの間で真であり、少なくともXPでは真実です。 – RBerteig

関連する問題