Wscript.Echo で止めない為に
WSH のテストをする場合エクスプローラからの起動が便利なわけですが、GUI を使用するとどうしても Wscript.exe が起動されて、デバッグの為に表示している Wscript.Echo が 実行毎にダイアログ表示になってしまいます。 これでは、ループ内で処理している場合等は悲惨な事になります。 そうならない為の関数です。スクリプト自身から再度 Cscript.exe で実行させる
具体的には Cscript.exe で実行して無かった場合にコマンドプロンプトを開いて、そこから Cscript.exe で自分自身を実行させて、終了したら PAUSE します。( Wscript で実行されたスクリプトは終了させます ) ※ スクリプトへの引数は引継ぎますサンプルコード( .vbs )
▼ 以下のコードでは、Crun 関数がその部分ですが、それを利用して『デスクトップのショートカットのアイコン情報』の一覧を表示しています。
Call Crun() Set Shell = WScript.CreateObject( "Shell.Application" ) Set WshShell = WScript.CreateObject( "WScript.Shell" ) ' デスクトップ Set objFolder = Shell.NameSpace( 0 ) Set objFolderItems = objFolder.Items() ' 一覧の数 nCount = objFolderItems.Count ' デスクトップ一覧の列挙 For i = 0 to nCount - 1 strPath = objFolderItems.Item(i).Path ' パスをピリオドで分解 aData = Split( strPath, "." ) ' 配列の上限値より、一番右端にある拡張子を取得 strTarget = aData( Ubound( aData ) ) ' 大文字に変換 strTarget = Ucase( strTarget ) ' デスクトップのショートカットのアイコン情報を取得 if strTarget = "LNK" then ' ショートカットへのオブジェクト( 保存はしない ) Set oShellLink = WshShell.CreateShortcut(strPath) strTarget = oShellLink.IconLocation ' %変数名% で参照される環境変数を展開する strTarget = WshShell.ExpandEnvironmentStrings(strTarget) if strTarget = ",0" then ' アイコンは、TargetPath の 0 番目のアイコンを使用 Wscript.Echo oShellLink.TargetPath else ' アイコンは、strTarget を , で分解して抽出 Wscript.Echo strTarget end if end if Next ' ********************************************************** ' Cscript.exe で実行を強制 ' Cscript.exe の実行終了後 pause で一時停止 ' ********************************************************** Function Crun( ) Dim str,WshShell ' 実行中の WSH のフルパス str = WScript.FullName ' 右から11文字取得 str = Right( str, 11 ) ' 全て大文字に変更 str = Ucase( str ) ' CSCRIPT.EXE でなければ処理を行う if str <> "CSCRIPT.EXE" then ' 実行中の自分自身(スクリプト)のフルパスを取得 str = WScript.ScriptFullName Set WshShell = CreateObject( "WScript.Shell" ) ' 実行中の自分自身(スクリプト)への引数を引き継ぐ為の文字列を作成 strParam = " " For I = 0 to Wscript.Arguments.Count - 1 if instr(Wscript.Arguments(I), " ") < 1 then strParam = strParam & Wscript.Arguments(I) & " " else strParam = strParam & Dd(Wscript.Arguments(I)) & " " end if Next ' cscript.exe で実行しなおす為のコマンドラインを実行 Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(str) & strParam & " & pause", 1 ) ' 実行中の自分自身(スクリプト)を終了 WScript.Quit end if End Function ' ********************************************************** ' 文字列を " で囲む関数 ' ********************************************************** Function Dd( strValue ) Dd = """" & strValue & """" End function
Microsoft のドキュメント
Shell.NameSpace method ShellSpecialFolderConstants(0はデスクトップ) Folder.Items method CreateShortcut メソッド ExpandEnvironmentStrings メソッド WshShortcut オブジェクト のプロパティ
【VBScript関連のカテゴリ】