• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WSH)

VBScriptの実行時パラメータの扱いについての質問

このQ&Aのポイント
  • VBScriptの実行時パラメータを扱う際に、未入力の場合にエラーが発生する問題について解決策を教えてください。
  • VBScriptの実行時パラメータの扱いに関する質問です。未入力の場合にエラーが発生する問題について解決策を教えてください。
  • VBScriptの実行時パラメータに関する問題です。未入力の場合にエラーが発生する際の解決策を教えてください。

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

  • ベストアンサー
  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

If WScript.Arguments.Count = 1 Then  If WScript.Arguments.Item(0) = "/all" Then   WScript.Echo "引数はALLです"  end if  WScript.Echo "引数あり" else  WScript.Echo "引数なし" end if 上記スクリプトでエラーになりませんが・・・

noname#39145
質問者

お礼

どうやら、他のところでエラーが起きていたようです。 おかげで気付くことができました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連する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

  • VBスクリプトで指定したコマンドで日付を取得するには?

    お世話になります。 VBスクリプトがうまく設定できなくて困っています。 下記は日付取得までです。 rem #***************************************** Option Explicit dim w_date rem #***************************************** rem # STEP01 パラメータチェック rem #***************************************** IF WScript.Arguments.Count = 0 then WScript.Echo "Parameter_No" WScript.Quit 99 End IF IF IsNumeric(WScript.Arguments.Item(0)) = False then WScript.Echo "Numeric_Check_Error" WScript.Quit 99 End IF rem #***************************************** rem # STEP02 日付計算 rem #***************************************** w_date = replace(DateAdd("d",WScript.Arguments.Item(0), date),"/","") WScript.Echo w_date Script.Quit 0 【前提】 cip△dtコマンドをDOSで打つと例のように出力されます。 【例】 YYYY/MM/DD△00:00:00 cip~~~~~~~ YYYY/MM/DD△00:00:00 cip~~~~~~~ 【実現したいこと】 VBスクリプトで、その1行目の日付を取得し、DOSの変数として保持したいです。 【前提】 cip△-dYYYYMMDDをDOSで打つとYYYYMMDDが入力した通りにでます。 【例】 YYYY/MM/DD△00:00:00 cip~~~~~~~ 【実現したいこと】 VBスクリプトで、前日の日付を取得し、DOSの変数として保持したいです。 どなたか助けてください。 宜しくお願いします。

  • VBスクリプトで指定コマンドを使って日付の取得

    お世話になります。 VBスクリプトがうまく設定できなくて困っています。 下記は日付取得までです。 rem #***************************************** Option Explicit dim w_date rem #***************************************** rem # STEP01 パラメータチェック rem #***************************************** IF WScript.Arguments.Count = 0 then WScript.Echo "Parameter_No" WScript.Quit 99 End IF IF IsNumeric(WScript.Arguments.Item(0)) = False then WScript.Echo "Numeric_Check_Error" WScript.Quit 99 End IF rem #***************************************** rem # STEP02 日付計算 rem #***************************************** w_date = replace(DateAdd("d",WScript.Arguments.Item(0), date),"/","") WScript.Echo w_date Script.Quit 0 【前提】 cip△dtコマンドをDOSで打つと例のように出力されます。 【例】 YYYY/MM/DD△00:00:00 cip~~~~~~~ YYYY/MM/DD△00:00:00 cip~~~~~~~ 【実現したいこと】 VBスクリプトで、その1行目の日付を取得し、DOSの変数として保持したいです。 【前提】 cip△-dYYYYMMDDをDOSで打つとYYYYMMDDが入力した通りにでます。 【例】 YYYY/MM/DD△00:00:00 cip~~~~~~~ 【実現したいこと】 VBスクリプトで、前日の日付を取得し、DOSの変数として保持したいです。 どなたか助けてください。 宜しくお願いします。

  • VBScriptでのDBのエラー取得

    VBScriptでADO(ADODB)接続により、SQLServer(2012)に接続して クエリを発行し、結果をファイルに出力するVBScriptを作成して います。 SQL実行時のエラーに対応する為、VBScriptにてエラーオブジェクトのプロパティ (Err.Number、Err.Description)を使用し、エラー番号と内容を取得しているの ですが、SQL Serverから発行しているエラー番号、エラー内容を取得したいので すが、取得できません。 どのようにすれば、データベース固有のエラーを取得ができますか。 是非ご教示いただきたく、 お手数をおかけ致しますが、宜しくお願い致します。 ------------------------------------------------- Option Explicit Dim objADO Dim objRS Dim Sql if WScript.Arguments.Count <> 1 then WScript.echo("usage: script.vbs arg1") WScript.Quit(-1) end if arg1 = WScript.Arguments(0) Set objADO = CreateObject("ADODB.Connection") objADO.Open "Provider=SQLOLEDB;" & _ "Data Source=hoge;" & _ "Initial Catalog=hoge;" & _ "Integrated Security=SSPI;" sql = "" sql = "select ~ where column ='"&arg1&"'" set objRS = objADO.Execute(sql) If Err.Number <> 0 Then objADO.Close Set objADO = Nothing WScript.Quit(-1) End If sql = "" sql = "update ~ ~ where column ='"&arg1&"'" objADO.Execute(sql) If Err.Number <> 0 Then 更新の破棄とエラー内容の表示 Else 更新を反映 End If objADO.Close Set objADO = Nothing

  • VBScriptで引数を認識しない

    自分が利用しているマシンにおいて、 WScriptで引数を認識しなくなってしまいました。 CScriptなら認識します。 また、別のマシンなら特に問題はありません。 例えば以下のようなコード。 If WScript.Arguments.Count >= 1 Then WScript.Echo WScript.Arguments.Item(0) End If 何かファイルをドラッグアンドドロップしたり、 コマンドプロンプトから引数をつけて実行するとその引数が表示される だけのものですが、何も表示されません。 環境はWindowsXP SP2です。 WMIサービスを再起動してみたり、 WMIリポジトリの再構築を行ってみましたが変化はありません。 先週までは動いていたのですが、最近何か設定を変えたような記憶もありません…。 テストを別環境で行えば済むだけなのでそれほど困った状況では ないのですが、どうにも原因がわからずすっきりしないので よろしければどなたかご回答のほど、お願いいたします。

  • 【VBScript】ファイル整形

    以下の流れのプログラムを作成したく、 進めています。 下記コードの続きは、どういった感じで作りこんでいけば、 この操作が実現しますでしょうか。 恐れ入りますが、ご教示いただけますと幸いです。 ・vbsファイルにテキストファイルをドラッグする ・インプットボックスに抽出したい文字列を入力する ・テキストファイルを読み込んで、抽出した文字列を含む行を注した  別名のテキストファイル(末尾に_YYYYMMDDをつける)を生成する Option Explicit Dim intc, strf, strArguments, strInput, strmsgbox intc = 0 If WScript.Arguments.Count = 0 Then WScript.Echo "引数が指定されていません。" Else For Each strArguments In WScript.Arguments intc = intc + 1 strf = strArguments Next If intc > 1 Then MsgBox "2つ以上のファイルが指定されています。" & vbCr _ & "ファイルを指定し直してください。", 48, "Error" Else WScript.Echo strf strInput = InputBox("抽出したい文字列を入力してください。") strmsgbox = MsgBox strInput & "を抽出しました。" & vbCr _ & strInput & "を変換しますか?", 4 + 32 + 0, "確認" End If End If

  • 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)

    「原紙」という名前のエクセルブックがあり、新しいお客様が増えたらそのブックを複製し、更にその時にダイアログを出してお客様の名前を入力し、それをファイル名にしたいです。 下記の.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

  • WSH(JScript)既に開いているIEのビジー

    .run で起動させた物がIEである場合、 そのIEの .busy や .readyState を取得したいと考えています。 たとえば以下の様な感じです。 var shApp = WScript.CreateObject("Shell.Application"); var iehandle; // 起動されてなければ実行する if(launchflag == 0){ var objSh = WScript.CreateObject("WScript.Shell"); objSh.Run("実行するとIEが起動するVBS等"); } //////// Aの地点 /////////////// // 対象ウィンドウが無いか探す for(i= 0; i< shApp.Windows().Count; i++){ // ここで対象のIEが見つればTrue if(shApp.Windows().item(i).FullName.match(/iexplore.exe$/i) && shApp.Windows().item(i).document.title.match(/対象のIEタイトル/i)){ iehandle = i; break; } } while(shApp.Windows().item(iehandle).document.readyState == "complete"){WScript.Sleep(100);} // 起動したのを確認してすぐ次の処理へ この例だとAの地点(その↓のif文の判定)で原因不明のエラーがでます。 ただ、WScript.Sleep(2000);などを入れて待機すると問題無く動作するので IEが起動しきる前に参照しようとしてエラーになっているのではないかと思われます。 どの様にするべきでしょうか?

  • VBSについて

    いつもありがとうございます。 現在、サーバ上の2つの共有フォルダへネットワークドライブを作成するVBSを作成しております。 動作と致しましては、VBS実行時に共有フォルダへアクセスするユーザ名とパスワードを入力するフォームを表示して、認証をパスするとネットワークドライブを作成します。 ※アカウント・パスワードは共通です。 ネット上からアドバイスをいただき、参考にして下記ソース(拙いコードで申し訳ありません)にて作成したのですが、接続に失敗した際のメッセージがうまくできません。 実現したいことは失敗した際の「ユーザ名、、またはパスワードが間違っています」を表示するようにしておりますが、ネットワークドライブ接続回分表示されます。(今回の場合は2回) 複数のネットワークに失敗した場合でも1回のみの表示にして処理を終了させたいのですが アドバイス頂けないでしょうか。(最終行付近) ----------------------------------------------------------------------------- Set objNetwork = WScript.CreateObject("WScript.Network") Set objWShell = CreateObject("wscript.shell") ' ホスト名 strComputerName = UCase(Left(objNetWork.ComputerName, 6)) ' 本スクリプト名 strScriptPath = WScript.ScriptName ' コンピュータ名から対象の学校を検索 Select Case strComputerName Case "CN3002" SchoolName = "会社A" ServerIP = "\\192.168.1.30" Drive_Letter1 = "S:" Drive_Letter2 = "T:" Drive_Letter3 = "U:" Drive_Letter4 = "V:" Drive_Letter5 = "W:" Drive_Letter6 = "X:" UNC_Path1 = ServerIP & "\共有A" UNC_Path2 = ServerIP & "\共有B" UNC_Path = Array(UNC_Path1, UNC_Path2) Drive_Letter = Array(Drive_Letter1, Drive_Letter2) Case Else Wscript.echo "対象のサーバが確認できません。" & chr(13) & "ホスト名を確認して再度実行してください。" WScript.Quit 10 End Select Set colDrives = objNetwork.EnumNetworkDrives Drive_Count = 0 ServerFlag = 0 Raku_ServerFlag = 0 For i = 0 to colDrives.Count - 1 Step 2 If Left(colDrives.Item(i + 1),15) = ServerIP Then ServerFlag = 1 End If If SchoolName = "会社B" AND Left(colDrives.Item(i + 1),15) = ServerIP2 Then Raku_ServerFlag = 1 End If Next If ServerFlag <> 1 Then call InputUser(strUser,strPassword) Raku_ServerFlag = 1 End If If SchoolName = "会社B" AND Raku_ServerFlag <> 1 Then call InputUser(strUser,strPassword) End If ' 認証のみで接続されているUNCパスへの対応 For i = 0 to colDrives.Count - 1 Step 2 Next colD_Count = i - 1 For j = 0 to UBound(Drive_Letter) Drive_Count = 0 For i = 0 to colD_Count Step 2 If Drive_Letter(j) = colDrives.Item(i) Then Drive_Count = Drive_Count +1 End If Next ' 洛陽2台目サーバ対策 If Drive_Count <> 1 AND SchoolName = "会社B" AND Drive_Letter(j) = Drive_Letter4 Then On Error Resume Next objNetwork.MapNetworkDrive Drive_Letter(j), UNC_Path(j), False, strUser, strPassword Call ErrorCheck(Err.Number) ElseIf Drive_Count <> 1 Then If ServerFlag <> 1 Then On Error Resume Next objNetwork.MapNetworkDrive Drive_Letter(j), UNC_Path(j), False, strUser, strPassword Call ErrorCheck(Err.Number) Else On Error Resume Next objNetwork.MapNetworkDrive Drive_Letter(j), UNC_Path(j), False Call ErrorCheck(Err.Number) End If End If Next ' ユーザ名とパスワードを入力 Sub InputUser(strUser,strPassword) On Error Resume Next Set objExplorer = WScript.CreateObject _ ("InternetExplorer.Application", "IE_") objExplorer.Navigate "file:///C:\WINDOWS\System32\Password.htm" objExplorer.Title = "学習系サーバ接続" objExplorer.ToolBar = 0 objExplorer.StatusBar = 0 objExplorer.Width = 400 objExplorer.Height = 200 objExplorer.Left = 300 objExplorer.Top = 200 objExplorer.Visible = 1 Do While (objExplorer.Document.Body.All.OKClicked.Value = "") Wscript.Sleep 250 Loop strUser = objExplorer.Document.Body.All.UserName.Value strPassword = objExplorer.Document.Body.All.UserPassword.Value strButton = objExplorer.Document.Body.All.OKClicked.Value objExplorer.Quit Wscript.Sleep 250 If strButton = "Cancelled" Then Wscript.Quit End If On Error Goto 0 End Sub Sub ErrorCheck(Err_Number) If Err_Number <> -2147024891 Then Select Case Err_Number Case -2147023570 Wscript.echo "ユーザー名かパスワードが間違っています。" Exit Sub Case 0 Exit sub Case Else Wscript.echo "ネットワーク状態を確認してください。" End Select End If End Sub ----------------------------------------------------------------------------- 以上、あまり良い質問ではありませんが、どうぞよろしくお願い致します。