• 締切済み

VBS でプログラムを先頭から再試行

VBSの実行中に、プログラムを先頭から再試行させるにはどうしたらいいですか? 2重起動ではなく、あくまでプログラム自身のリスタートです。 処理 A num = msgbox ("プログラムの再試行",5) if num = 4 then '再試行が押されたなら リスタート else 'キャンセルなら WScript.Quit end if 処理 B 上記の「リスタート」の部分の記述をお願いします。

みんなの回答

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

これでどうでしょう。 ただし、メモリ使用量が酷いことになっても責任はとれませんがw Call RestartTest Sub RestartTest()  Dim num  ' 処理Aをここに挿入  num = msgbox ("プログラムの再試行",5)  if num = 4 then   Call RestartTest   WScript.Quit  End If  ' 処理Bをここに挿入 End Sub

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

全体をループで括って リスタートする必要がある時にループの継続条件をTRUEにする ' --- num = 0 Do While num = 4  処理A  num = msgbox ("プログラムの再試行",5) Loop 処理B '--- 質問のコードだと再試行以外の時にスクリプト終了しちゃうから処理Bが実行されない気がするが。

whitesword
質問者

補足

回答有り難うございます。 プログラム全体を入れ子にすると出来ますね。 ただこの分岐場面が複数箇所であった場合は、かなり乱雑なプログラムになってしまいます。 命令文で、「プログラムの先頭から再実行」的な物は出来ないでしょうか? (WScript.Quit は無視して下さい。)

関連するQ&A

  • 【VBScript】プログラム改良

    VBScriptのプログラムについて、 回答頂きたく投稿しました。 以下を実行すると、 65行目で「'End'がありません。」とエラー表示されてしまいます。 End Ifは入れているはずですが、どこが問題なのでしょうか? またIfステートメントを少し減らしたいのですが、 どうすればシンプルな形になりますでしょうか? 恐れ入りますが、アドバイス頂ければ幸いです。 Option Explicit Dim intCount, strFile, strArg, strX, lonMsgBox, objFSO, objOpen, strText, strNewFile, objTS intCount = 0 If WScript.Arguments.Count = 0 Then WScript.Echo "引数が指定されていません。" WScript.Quit End If For Each strArg In WScript.Arguments intCount = intCount + 1 strFile = strArg Next Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.GetExtensionName(strFile) <> "txt" Then If intCount > 1 Then MsgBox "2つ以上のファイルが指定されています。" & vbCr _ & "ファイルを指定し直してください。", 48, "Error" WScript.Quit Else MsgBox "テキストファイル以外が指定されています。" & vbCr _ & "ファイルを指定し直してください。", 48, "Error" WScript.Quit End If Else strX = InputBox("抽出したい文字列を入力してください。", "変換処理") If strX <> "" Then lonmsgbox = MsgBox (strX & "を抽出します。" & vbCr _ & "変換しますか?", 4 + 32 + 0, "確認") If lonmsgbox = 6 Then strNewFile = objFSO.BuildPath( _ objFSO.GetParentFolderName(strFile), _ objFSO.GetBaseName(strFile) & "_New." & objFSO.GetExtensionName(strFile)) Set objTS = objFSO.OpenTextFile(strNewFile, 2, True) Set objOpen = objFSO.OpenTextFile(strFile, 1) Do Until objOpen.AtEndOfStream = True strText = objOpen.ReadLine If InStr(strText, strX) > 0 Then objTS.WriteLine strText End If Loop objTS.Close Set objTS = Nothing objOpen.Close Set objFSO = Nothing WScript.Sleep 1000 MsgBox ("文字列の抽出が完了しました。") Else MsgBox ("処理を中断します。") End If End If ElseIf IsEmpty(strX) then MsgBox ("キャンセルされました。") WScript.Quit Else MsgBox "文字列が入力されていません。" & vbCr _ & "入力し直してください。", 0, "Error" WScript.Quit End If

  • VBS どうするの?

    VBSで、 a=inputbox("0+1=") if lang=1 then  msgbox("あってます。")  else  msgbox("間違えています。") end if として、 msgbox("間違えています。") のあとに、もういちど最初(aの位置)にもどしたいときはどうすればよいでしょう? よろしくおねがいします。

  • エクセルブックの複製(.vbs)

    「原紙」という名前のエクセルブックがあり、新しいお客様が増えたらそのブックを複製し、更にその時にダイアログを出してお客様の名前を入力し、それをファイル名にしたいです。 下記の.vbsファイルに元ファイルをドラッグすると連番を付けて複数作る、という目的でのコマンドを見つけました(これも凄いですが)。 もし改良出来る方がいたら教えてください。 ・コピー数の指定は必要ありません(毎回1ファイルのみ複製)。 ・ドラッグすると、ダイアログが出てきて入力したものがファイル名になる。 よろしくお願い致します。 If WScript.Arguments.Count = 0 Then WScript.Quit Dim fso Set fso = CreateObject( "Scripting.FileSystemObject" ) '--- コピー元ファイルの確認 filePath = WScript.Arguments.Item(0) If fso.FileExists( filePath ) = False Then WScript.Echo filePath & "がありません" WScript.Quit End If '--- コピー数の指定 Num = InputBox( filePath & vbNewLine & "をいくつコピーしますか") If IsNumeric( Num ) = False Then WScript.Echo "数値を入力してください。" WScript.Quit End If If Num > 999 Or Num < 1 Then WScript.Echo "数値は1~999で指定してください。" WScript.Quit End If Extention = "." & fso.GetExtensionName( filePath ) '--- ファイルチェック For i=1 To Num newFilePath = Replace( filePath, Extention, "_" & Right( "000" & i, 3) & Extention ) If fso.FileExists( newFilePath ) = True Then WScript.Echo "作成予定のファイル【" & newFilePath & "】が既に存在します。" WScript.Quit End If Next '--- ファイルコピー For i=1 To Num newFilePath = Replace( filePath, Extention, "_" & Right( "000" & i, 3) & Extention ) fso.CopyFile filePath, newFilePath Next

  • 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の内容を編集したい(アクションを増やしたい)

    現在のVBS記述は以下のとおりです。 NUM = MsgBox("メール" & vbCrLf & "日報" & vbCrLf & "緊急案件" & vbCrLf & "引継ぎ・持ち越しアクション" & vbCrLf & "すべて確認しましたか?", vbYesNo + vbCritical, "お疲れ様です。") if (num =VBYES) then msgbox "モニターを消して業務終了してください。" & vbCrLf & "お疲れ様でした♪",0,"OK!"(※1) elseif (NUM =VBNO) then msgbox "すべてチェックしてください!",0,"注意" Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "z:\v\hhc\本部\業務処理関係\終了チェック.vbs" Set WshShell = Nothing msgbox "業務終了前には、必ずチェックしてください!" end if 上記(※1)でOKを押したときに、c:\s.lnkを実行するようにしたいのですが、どのように記述すればよいでしょうか? 当方、VBは疎く、この記述を作った担当者が退職したために、動かすことができなくなり困っております。

  • vbsのif文で複数条件の判定

    例えば以下である場合、 WScript.echo AAA WScript.echo BBB vbsを実行すると "?"が表示されます。 "OK"が表示されない原因として考えられる事はありますでしょうか If AAA = false Then If BBB = false Then WScript.echo "OK" else WScript.echo "NG" End If else WScript.echo "?" End If

  • vbsのFolderExistsで部分一致をさせたい

    VBSで以下のコードを作成しましたが動作しません。 ********動作しない************************** if (objFileSys.FolderExists("200810*")= True) then  msgbox "yes" else  msgbox "no" end if ********動作する************************** if (objFileSys.FolderExists("200810")= True) then  msgbox "yes" else  msgbox "no" end if 部分一致でフォルダが存在するかをしたいのですが、 どうしたらいいのでしょうか。 よろしくお願いします。

  • VBSを使用したSQLCMDからのQuit

    VBSを使用してSQLCMDを実行してデータベースに接続できることを確認しましたが、 データベースの切断ができません。 SQLCMDユーティリティに制御が移ってしまっているため、VBSのシェルオブジェクトを使用して切断できないのではと考えております。 ADOを使用すれば、いいのは分かっているのですが、実際の環境ではADOを使用したデータベースへの接続が安定しないため、SQLCMDで接続する方法でスクリプトを作成しました。 何かいい方法がありましたら、ご教示頂けますでしょうか。 Option Explicit '■ オブジェクトの宣言 Dim objFSO Dim objFile Dim objWShell '■ 変数の宣言 Dim strBuf Dim strSearch Dim IngPos Dim IngCnt Dim idx Dim Param(3) Dim Hit Dim HitCnt Dim DBConCmd Dim DisConCmd '■ 定数の宣言 '// データベースコンフィグファイル格納フォルダ Const strDBConfigFolder = "c:\DBConfig" '// データベースコンフィグファイル Const strDBConfigFile = "c:\DBConfig\SQLCMDDBCon.cfg" '// 検索開始位置(1文字目) Const IngStart = 1 '// テキストモードで比較 Const IngTextCmp = 1 On Error Resume Next '□ FSOオブジェクトの作成 Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then '□ データベースコンフィグファイル格納フォルダの存在チェック If objFSO.FolderExists(strDBConfigFolder) Then WScript.Echo "データベースコンフィグファイルを格納フォルダが存在します" '□ データベースコンフィグファイルの存在チェック If objFSO.FileExists(strDBConfigFile) Then WScript.Echo "データベースコンフィグファイルが存在します" '□ データベースコンフィグファイルの読み込み Set objFile = objFSO.OpenTextFile(strDBConfigFile, 1) '□ データベースコンフィグファイル読み取りチェック If Err.Number = 0 Then WScript.Echo "データベースコンフィグファイルが読み取りできます" '□ ディレクティブをセット strSearch = Array("<server_name>", "<login_id>", "<password>") '□ ヒットカウントの初期化 HitCnt = 0 Do Until objFile.AtEndOfLine = True '□ 1行読み込み、バッファに格納 strBuf = objFile.ReadLine '□ インデックスの初期化 idx = 0 '□ ヒットフラグの初期化 Hit = 0 '□ ディレクティブヒット判定用の初期化 IngPos = 0 Do Until idx > 2 or Hit = 1 IngPos = Instr(IngStart, strBuf, strSearch(idx), IngTextCmp) If IngPos = 0 Then WScript.Echo strSearch(idx) & "が見つかりません" idx = idx + 1 Else WScript.Echo strSearch(idx) & "が見つかりました" IngCnt = Len(strSearch(idx)) Param(idx) = Mid (strBuf, IngCnt + 1) Hit = 1 HitCnt = HitCnt + 1 End If Loop Loop Else WScript.Echo "データベースコンフィグファイルが読み取りできまないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "データベースコンフィグファイルが存在しないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "データベースコンフィグファイルを格納フォルダが存在しないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "FSOオブジェクトが作成できないため、処理を終了します" WScript.Quit(1) End If '□ Shellオブジェクトの作成 Set objWShell = WScript.CreateObject("WScript.Shell") If Err.Number = 0 Then DBConCmd = "sqlcmd -S " & Param(0) & " -U " & Param(1) & " -P " & Param(2) objWShell.run DBConCmd If Err.Number = 0 Then WScript.Echo "データベースサーバーに接続しました" Else WScript.Echo "データベースサーバーに接続できませんでしたので、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "Shellオブジェクトが作成できないため、処理を終了します" WScript.Quit(1) End If DBDisConCmd = "exit" objWShell.run DBDisConCmd '□ オブジェクトのクローズ objFile.Close '□ オブジェクトの開放 Set objShell = Nothing Set objFSO = Nothing

  • vbsのmsgboxランダム表示について

    つい先日、vbsをいじりだしたばかりの初心者です。 このプログラムなんですが・・・ msgbox("冒険はじまりー"),,("冒険") msgbox("てくてく") i = msgbox("分かれ道だ" & vbCrLf & "はい:左 いいえ:真ん中 キャンセル:右",3,"わかれみち") if (i=6) then msgbox("いきどまり") msgbox("ゲームオーバー") elseif (i=2) then msgbox("いきどまり") msgbox("ゲームオーバー") else msgbox("モンスターがあらわれた",48,"バトル") myhp=10 mymp=5 youhp=20 for i=0 to 10 step 0 num=msgbox("HP(" & myhp & ")" & vbCrLf &_ "MP(" & mymp & ")" & vbCrLf &_ "モンスターHP (" & youhp & ")" & vbCrLf &_ "こうげき:はい かいふく:いいえ まほう:キャンセル",3,"バトル") if(num=6)then myhp = myhp-1 mymp = mymp+1 youhp = youhp-1 msgbox("こうげき!" & vbCrLf &_ "モンスターHP-1" & vbCrLf & "自分のHP-1" & vbCrLf & "自分のMP+1") elseif (num=7) then myhp = myhp+3 mymp = mymp-3 msgbox"HPが3回復 MPが3減った" else youhp = myhp-2 mymp = mymp-2 msgbox"まほうをつかった MP-2 モンスターHP-2" end if if(youhp=0)then msgbox"モンスターに勝った!",64,"やったね" msgbox"おしまい" exit for elseif(myhp=0)then msgbox"負けた",16,"ざんねん" msgbox"ゲームオーバー",16,"ざんねん" exit for end if next end if これの、攻撃とか魔法とかのところでmsgboxにランダムで違うメッセージを出すことは できますか?(3パターンくらいです) 調べてみても書き方がよくわかりませんでした・・・。 それと、ゲームオーバーの場合、もう一度やるかどうかの選択メッセージの出し方も 教えていただけると嬉しいです。 質問が多くてごめんなさい、どうぞよろしくお願いしますm(_ _)m

  • “.vbs”のファイルが実行できない

    まったく初歩的な質問で申し訳ないのですが、拡張子がvbsのファイルが実行できません。 あるソフトをアンインストールするために実行したいんですが、ダブルクリックするとアプリケーションを選べみたいなのが出てきて、よく分かりません。 一応、そのvbsファイルをNotepadで開いてみたものを載せときます。 ---------------------------------------- On Error Resume Next set shell = CreateObject("WScript.Shell") set fso = CreateObject("Scripting.FileSystemObject") bcp="C:\Program Files\BCP" msg = msgbox("ブラクラでヤバイVer4をアンインストールしますか?",vbYesNo) if msg=vbNo then WScript.Quit if fso.FolderExists("C:\Program Files\BCP\")then fso.DeleteFolder bcp msgbox "フォルダの削除完了" end if shell.RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\ブラクラでヤバいでチェック\") shell.RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\ブラクラでヤバいを起動\") msgbox("アンインストールが完了しました。"&Chr(13)&Chr(13)&"By 禿親父") ---------------------------------------- どなたか分かる方いましたら教えてください。 よろしくお願いします。

専門家に質問してみよう