VBSで特定のエラーが出た場合のみスルーしたい

このQ&Aのポイント
  • VBS実行中、特定のエラー番号が出た場合にエラーメッセージを無視する方法について教えてください。
  • 複数のVBSを同時に実行する環境で、特定のエラーコードのみ無視(他のアクションへ分岐させる)する方法を教えてください。
  • ファイルを開くアクションでファイルが存在しない場合にはVBSの実行を終了したいです。他の代替案があれば教えてください。
回答を見る
  • ベストアンサー

VBSで特定のエラーが出た場合のみスルーしたい

VBSについて質問です。 VBS実行中、事前に予測できる特定のエラー番号が出た場合にのみ エラーメッセージを無視させることはできないでしょうか http://bayashita.com/p/entry/show/76 ↑こちらのページ等を拝見させていただき、 事前にエラーが出ることが分かる個所の前に On Error Resume Next を挿入して、以降全てのエラーを無視させる。 特定のエラー番号が出た場合に Select Case Err.Number Case 53   WScript.Echo "stop" End Select と番号に該当する指示をさせる。 On Error Goto 0 でエラーを正しく表示させるように戻す。 までは分かりました。 複数のVBSを同時に実行する可能性がある環境な為、 エラーメッセージ全てを無視させてしまうと運用に問題があります。 個々のVBSそれぞれで特定のエラーコードのみ無視(といいますか、他アクションへ分岐?)させる方法を教えていただきたいです。。。 具体的には、 ファイルを開くアクションでファイルが無かった場合に パスが存在しませんという旨のエラーメッセージが出る場合はその時点でVBSの 実行自体を終了したいです。 代替案あれば教えていただけると幸いです。 回答よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>複数のVBSを同時に実行する可能性がある環境な為、 >エラーメッセージ全てを無視させてしまうと運用に問題があります。 On Error Resume Next は、同時実行している他のスクリプトに影響しないよ。もちろん、後から起動されたスクリプトにも影響しない。実行を開始した時点は、全てOn Error Goto 0の状態になる。

sahksas
質問者

お礼

回答ありがとうございます! なんと、、! そもそもの認識が間違っていたようですね、、、

その他の回答 (2)

回答No.3

エラーナンバーによる分岐は、 それはそれで勿論出来るようにしておいた方がいいと思いますが、 VBSの場合は、FSOを使いこなすことの方が大事な気がします。 パスを渡して、ファイルやフォルダの存否確認は出来ますので、 ご質問の課題は、エラーを扱う必要のあるケースでもないように 思うのですが。 エラーコードを丸暗記して使いこなせるレベルともなれば、 敢えてエラーに掛けた方がコーディングが早く済む、 という考えでもいいのかも知れませんが、私の場合は、  用意されているもので判別可能なものと、  そうでないものをエラーで扱うのと、 分けて書く方を優先して、必要な場面では徹底してエラーを扱う みたいな。 > ファイルを開くアクションでファイルが無かった場合に > パスが存在しませんという旨のエラーメッセージが出る場合はその時点でVBSの > 実行自体を終了したいです。 > 代替案あれば教えていただけると幸いです。 例えば、 ' // If objFSO.FileExists(strFileName) Then ' 指定パスのファイルが存在する場合の処理 Else ' 指定パスのファイルが存在しない場合の処理 WScript.Echo "message" WScript.Quit(1) End If ' // とか。

sahksas
質問者

お礼

回答ありがとうございます! >パスを渡して、ファイルやフォルダの存否確認は出来ますので、 >ご質問の課題は、エラーを扱う必要のあるケースでもないように >思うのですが。 まさしくこれがやりたかったのですが、イマイチ分からなかったので、、 OnErrorで無理やり突破するより、 書いて頂いたサンプルの方が、現在の問題を解決するには確かにスマートに 出来そうです! 大変参考になりましたm(__)m

  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.1

On Error Resume Next 'ここでエラーが起きそうな処理をする。 (略) 'もしエラーがあったら If Err.Number <> 0 Then 'エラー番号で処理分けして Select Case Err.Number 'もしFile not foundだったら Case 53   '普通に標準のエラートラップが起きるように設定して   On Error Goto 0   '擬似的にエラーを起こして、VBSを例外終了させる   Err.Raise 53   '念のためにVBSを終了させるコードを書いておくが、実行されない   WScript.Quit 53 End Select '上記で処理しないエラーは無視したいのでエラーをクリアする Err.Clear End If

sahksas
質問者

お礼

回答ありがとうございます! 丁寧に教えていただきとてもありがたいのですが、 「On Error Resume Next」を使うと別のスクリプトにも影響 が出ると思っていたので、エラー全てを無視しないで済む書き方 を探していました。 しかし他の方の回答にあるように、他のスクリプトには影響しないんですね、、、 質問内容の理解と説明が浅く申し訳なかったですが、その旨も補足して頂ければわかったのですが、、 次回エラーの分岐を扱う際はそのままコード使わせていただきます! 大変感謝です!

関連するQ&A

  • VBSで特定の文字列が含まれる場合の処理方法

    こんにちは。 自分史上初めて投稿します。 テキストファイルを簡単に操作出来るということを聞いて、さいきんVBSを勉強し始めました。 そこで、特定のファイルの中身を読み込んで配列関数を使い配列に格納した後、特定の文字列が含まれる場合には別の文字列へと変換したいと思っているのですが、正規表現が上手くいきません(汗) どなたか助けていただけませんでしょうか? それともそもそも正規表現が使えないなんてことはないですよね・・・? よろしくお願いいたします。 ちなみに書いたコードは↓ Set WSHFso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Dim strSearchWord Set tmpFile = WSHFso.OpenTextFile("C:\Documents and Settings\●●●\○○.txt") Do Until tmpFile.AtEndOfStream tmpLine = tmpFile.ReadLine strSearchWord = strSearchWord & tmpLine & vbcrlf Loop Dim SearchWord SearchWord = split(strSearchWord," ") Select Case SearchWord(9) 'ここで『東京』というワードが含まれる場合に別処理を走らせたいのです・・・。 Case "*" & "東京" & "*" msgbox SearchWord(10) Case Else msgbox SearchWord(101) End Select

  • VBSでエラーとなってしまいます

    VBS(WSH)超初心者です。どうぞよろしくご教授ください。 Pcomm(AS400クライアント接続ソフト)のサイレントインストールを、VBS(WSH)でやりたいと思っていますがスクリプトエラーとなってしまいます。 <質問内容> 下記スクリプトを実行すると、PcommPath=の行で「ステートメントの末尾が不正です」となってしまいます。 多分、ダブルクォーテーションの使い方が間違ってると思うのですが、色々調べてみましたがわかりません。 どなたかご教授くださいませ。 なお、(VBSではなく)「ファイル名を指定して実行」からなら問題なくサイレントインストールできます (コメントアウトしてる D:\install・・・/qb"部分を実行) どうぞよろしくお願いいたします。 [スクリプト] Option Explicit Dim objWshShell,objWshScriptExec,PcommPath 'D:\install\pcomm\setup.exe /s /v"USEINI=\"C:\Pcomm.ini\" /qb" '上記中のPcom.iniはカストマイズ用のファイル。 ’上記で、「ファイル名を指定して実行」からなら問題なくサイレントインストールされます PcommPath="D:\install\pcomm\setup.exe /s /v"USEINI=\"C:\Pcomm.ini\" /qb"" Set objWshShell=WScript.CreateObject("WScript.Shell") Set objWshScriptExec=objWshShell.Exec(PcommPath) (以下略)

  • VBSについて教えてください。

    VBSを勉強したくて http://www.whitire.com/vbs/tips0001.html のサンプルコードを見たのですが Option Explicit WScript.Echo "Hello VBScript World" はどこに張り付ければいいのでしょうか? エクセルVBAの標準モジュールに Sub test() WScript.Echo "Hello VBScript World" End Sub として実行してみましたが WScriptの部分がコンパイルエラーになってしまいました。

  • vbsでのエラー処理についてレクチャーを

    vbsのcopyhere関数でファイルのコピーを行うスクリプトを作成しました。コピー自体は問題なく出来るのですが、コピー元のファイルが存在しなかった場合は何も実行されないまま次の処理へ行ってしまうので、そういう場合にエラー用の処理をさせたいと考えてます。 Errメソッド使えばいいと思うのですがうまくいかなかったのでご教授ください。 試しに作成したvbs----------------------------------------- On Error Resume Next Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(strTargetFolder) 'コピー先フォルダの設定 objFolder.CopyHere strCopyFile , &H10 ' set objShell = Nothing 'コピーが失敗した場合に実行させる。 if Err.Number <> 0 Then MsgBox "インストーラーをコピーできませんでした。","コピーに失敗しました" WScript.Quit end if ↓正常にコピー完了した後の処理 これでは上手くいきませんでした。 どうすればエラー時の処理を追加できるでしょうか?

  • VBSファイルをスタートアップフォルダに入れておいて、

    エクセル2007の特定ファイルをそのVBSファイルにより自動起動させる方法を教えてください。ちなみに、次のようなVBSファイルを作成しましたがエラーとなってしまいます。 Option Explicit 'オブジェクト変数の宣言とWshShellオブジェクトの作成。 Dim objWshShell Set objWshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 1000 '1秒待機 objWshShell.Run "C:¥Program Files¥Microsoft Office¥Office12¥EXCEL.exe" です。

  • vbsよりIEをアクティブに開きたい

    お世話になります。 Windows7Pro サーバー上にあるhtmlファイルをvbsより開いてます。 また、5秒で閉じるようにしてます。 現状、vbsを実行するとhtmlファイルが開くことは開くの ですが、他ウィンドウの後ろになってしまいます。 どこをどうすれば開いたhtmlファイル(IE)を最前面で起動 することができますでしょうか。 【vbsの内容】 Option Explicit On Error Resume Next Dim strUrl ' 表示するページ Dim objIE ' IE オブジェクト strUrl = "サーバー上にあるhtmlファイルのパス" Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.ToolBar = False If Err.Number = 0 Then objIE.Navigate strUrl objIE.Visible = True objIE.Width = 800 objIE.Height = 400 objIE.Top = 0 objIE.Left = 480 WScript.Sleep 5 * 1000 objIE.Quit Else WScript.Echo "エラー:" & Err.Description End If 【htmlの内容】 <html> <head> <title>テスト</title> </head> <BODY> <IMG src="画像のパス"> <font size="7">TEST</font> </div> </body> </html> ご教示の程、宜しくお願い致します。

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • VBSでADO接続に失敗した場合にフリーズする

    VBSでADO接続に失敗した場合にフリーズするのですが、何とか ならないでしょうか。 以下、わたしのコード(戻り値を返(WSCript.Quit Err.Number)したいので、On Error Resume Nextは外せません。) Option Explicit On Error Resume Next Dim objADO Set objADO = CreateObject("ADODB.Connection") objADO.Open "Driver={SQL Server};server=" & WScript.Arguments(0) & _ "; database=" & WScript.Arguments(1) & _ ";uid=" & WScript.Arguments(2) & _ ";pwd=" & WScript.Arguments(3) & ";" objADO.Execute(WScript.Arguments(4)) objADO.Close Set objADO = Nothing WSCript.Quit Err.Number

  • VBSでフォルダ、ファイル作成時のエラーコード

    フォルダ、ファイルが存在しないとき、作成するスクリプトをVBSで作成していますが、疑問点があるのでご教示ください。 objFSO.CreateFolder、objFSO.CreateTextFileを実行が、正常に行われた場合、 Err.Numberに0がセットされると思っていましたが、実際は違っていました。 objFSO.CreateFolderでフォルダが作成される場合、Err.Numberに13が返されます。 objFSO.CreateTextFileでファイルが作成される場合、Err.Numberに438が返されます。 このスクリプトを実行後、フォルダ、ファイルが存在しない場合、作成されることも確認しています。 フォルダ作成後、作成されたフォルダに対して、ファイルの作成/データの書き込みのアクセス権を拒否にすると返されるErr.numberに70がセットされることも確認しています。 なぜ、フォルダ、ファイルが作成された場合、0が返されないのかご存知の方がいらっしゃいましたらご教示ください。 また、その情報が記載されている書籍およびサイトがあれば、お教えいただければ、幸いです。 Option Explicit Dim objFSO Dim objFile Const strFolderName = "C:\VBS" Const strFileName = "C:\VBS\test.txt" On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then WScript.Echo "FSOオブジェクトを作成しました" Else WScript.Echo "FSOオブジェクトを作成できませんでした" WScript.Quit(1) End If If objFSO.FolderExists(strFolderName) Then WScript.Echo "フォルダが見つかりました" Else WScript.Echo "フォルダが見つかりませんでした" If objFSO.CreateFolder(strFolderName) Then If Err.Number = 13 Then WScript.Echo "フォルダを作成しました" Else WScript.Echo "フォルダを作成できませんでした" WScript.Quit(1) End If End If End If If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else Script.Echo "ファイルが見つかりませんでした" If objFSO.CreateTextFile(strFileName) Then If Err.number = 438 Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If End If

  • vbsの保存方法が分からない

    Wscript.StdOut.Write "Height(m) = " H = WScript.StdIn.ReadLine Wscript.StdOut.Write "Weight(kg) = " W = WScript.StdIn.ReadLine BMI = W / (H * H) Wscript.StdOut.Write "BMI = " & BMI & vbLf BMIの上記コードをコマンドプロンプトで書き込み practice に保存しようとすると なぜか bmi とだけ表記されて本のような bmi.vbs にならない。 従い、これを cscript.bmi.vbs で実行しようとエンターすると スクリプト C: ¥practice¥bmi.vbs 行:1 文字:1 コード:80070006 ソース:(null) となり、実行できない。 practice に保存するとき、 ファイル名 の蘭に *.txt を消して bmi.vbs と記入している。これが間違いですか?

専門家に質問してみよう