外部プログラムの実行

  WshShell.Run による外部プログラムの実行



↓Microsoft にあるサンプルコード
  
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run( "%windir%\notepad " & WScript.ScriptFullName )
  

通常外部プログラムをスクリプトから起動するには、WshShell.Run メソッドを使用しますが、実行する外部プログラムによっていくつか気を付けなければならない事があります

( もし実行に問題が出る場合は、zip.exe を cmd.exe /c zip.exe に書き換えて下さい )



非同期処理
  
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run( "zip.exe -r homepage D:\nifty\homepage" )
MsgBox("OK")
  

このコードは、D:\nifty\homepage 以下のファイルを全て homepage.zip に圧縮する処理ですが、圧縮が完了する前にメッセージボックスが表示されてしまいます。

バッチ処理は同期処理が基本なので、以下のように書き直します



同期処理 : コマンドプロンプトを開く
  
Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage", , True )
MsgBox("OK")
  

また、zip.exe はコンソールアプリケーション( コマンドライン用 ) なので、実行時にコマンドラインプロンプトのウインドウが開きます。処理時間の長い処理の場合は、実行中である事を示すために表示させる必要も出でてきますが、短時間の処理であればコマンドラインプロンプトのウインドウを開く必要がありません。

そのような場合は以下のように記述します



同期処理 : コマンドプロンプトを開かない
  
Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage", 0, True )
MsgBox("OK")
  

これは、バッチファイルの実行の場合にも同じ事が言えます。また、バッチファイルを実行する場合は cmd.exe /c バッチファイル と書きます



同期処理 : バッチファイルの実行
  
Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( "cmd.exe /c homepage.bat", 0, True )
MsgBox("OK")
  

homepage.bat
  
zip.exe -r homepage D:\nifty\homepage
  


cmd.exe はバッチファイルの代わりに以下のようにして複数の処理を一度に指定できます

cmd.exe /c c: & cd \ & cd "c:\BatchHelper" & wscript.exe "c:\BatchHelper\setup.vbs"













  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ