(for Internet Explorer)
Sub  echo_line()
(src)
水平線を表示します。
------------------------------------------------------------
表示内容:
ファイル:
vbslib.vbs
Function  FuncA( Param1 )
  echo  ">FuncA " & Param1
  Dim  ec : Set ec = new EchoOff

  echo  "SubA"

  ec = Empty
  echo  FuncA
End Sub
EchoOff オブジェクトがあるときは、
(src)
で出力しません。
呼び出した関数名を表示する
EchoOff オブジェクトの削除で、表示を復活します。
ec=Empty しない場合でも、FuncA から返ると自動的に復活します。
(デストラクタによるため)
通常、下記のように使います。
関連
EchoOff オブジェクトがあるときに、長い処理の進捗状況を表示したいときは、echo_r で標準出力へ出力して
ください。
EchoOff
echo で表示しないようにする
ここの echo では表示されません。 実際は、FuncA 関数から呼び
出す関数の中から呼ばれる echo による表示を抑制します
ファイル:
vbslib.vbs
Sub  DisableEchoOff()
EchoOff オブジェクトがあっても、echo 出力するようにします。
関連
Sub main()
  DisableEchoOff
    :
サンプル:
(src)
ファイル:
vbslib.vbs
Function  echo_v( Message as string ) as string
文字列を出力します。 フィルタリングされません。
【引数】
Message
出力する内容の文字列(文字列以外は指定できません)
ファイル:
vbs_inc_400.vbs
サンプル
If g_verbose Then  echo_v  "処理は1つも行われませんでした。"
g_verbose を使うときは、echo_v を使用してください。
の影響を受けません。(= フィルタリングされません)
エラーメッセージは、echo ではなく echo_v を使用してください。
テスト
→ T_Verbose.vbs # [T_Verbose]
関連
(src)
Function  echo_r( Message as string, RedirectPath as string ) as string
標準出力かファイルに、文字列を出力します。
【引数】
Message
RedirectPath
出力する内容の文字列など(echo と同じ)
出力先のファイルパス、Empty のときは出力しない、""=標準出力へ
返り値
出力した内容の文字列
関連
(src)
サンプル:
echo_r  "エラー", ""
ファイル:
vbslib.vbs
(src)
Function  Execute_Echo( ExpressionStr as string, Label as string ) as string
式とその計算結果を表示します。 デバッグ用です。
【引数】
ExpressionStr
Label
式(文字列)
表示内容の最初に表示するラベル
返り値
Execute に渡すコード
ファイル:
vbslib.vbs
書きかけ
関連
サンプル
Message を表示可能な文字列に変換します。
Function  GetEchoStr( Message as variant ) as string
(src)
Message がオブジェクトの場合、
Message が Dictionary の場合、キーとアイテムの両方を文字列にします。
このとき、アイテムを再帰的に GetEchoStr に渡します。
Message が配列または ArrayClass の場合、すべての要素を文字列にします。
テスト
ファイル:
vbslib.vbs
サンプル:
s = GetEchoStr( object )
→ T_Value.vbs # T_EchoStr
の返り値を返します。
(src)
Dim  g_CustomEchoStrGenerators  as dictionary of Function
Function  InitializeModule( ThisPath )
  Set g_CustomEchoStrGenerators( "ClassA" ) = GetRef( "ClassA_xml_sub" )
End Function

Function  ClassA_xml_sub( m as Object, Level as integer )
  ClassA_xml_sub = GetTab(Level)+ "<"+TypeName(m)+" Name='"+ XmlAttrA( m.Name ) +_
                   "'/>"+ vbCRLF
End Function
表示可能な文字列に変換する関数の辞書。
サンプル
参考
の引数に指定したオブジェクトのクラスに、
関数の中で、g_CustomEchoStrGenerators に関数を登録してください。
を定義できないときは、
登録する関数は、xml_sub メソッドと同じ形式の文字列を返すようにしてください。
Sub  Pause()
続行するには Enter キーを押してください . . .
コマンドプロンプトにメッセージを表示して、Enter キーを押すまで待ちます。
メッセージの内容:
(src)
サンプル:
echo  "処理を開始します。"
If not ArgumentExist( "silent" ) Then  Pause
デバッグするときは、Pause より MsgBox を使った方がよいでしょう。
Pause は、子プロセスがからむと、メッセージが表示されない可能性があるためです。
silent
"処理を開始します。"
Pause
ファイル:
vbslib.vbs
Pause
サンプル:
Sub  pause2()
コマンドプロンプトを使う .vbs ファイルをダブルクリックしたときだけ pause します。
プログラムの最後で pause2 すると、コマンドプロンプトに出力した内容を確認できます。
(src)
Function  Input( Prompt as string ) as String
プロンプトを表示し、ユーザからのキーボード入力を待ちます。
【引数】
Prompt
返り値
表示する内容
ユーザが入力した文字列、入力なし=""
input(src)
CUI(src)
  Dim  key
  key = Input( "キーワードを入力してください >" )
  echo  key
テスト
→ [T_UI]
→ [T_ExecStdIn]
→ [T_ExecStdIn_300]
サンプル
254文字以上は入力できません。
コマンドプロンプトから入力した場合、128文字以上を入力したときに日本語文字が入って
いると、128文字目付近の文字が消えてしまうため、 InputBox を使って再入力を要求します。
コマンドプロンプトから入力した場合、128文字目が日本語文字の場合は、cscript.exe が、
例外を発生してしまいます。
関連
Ctrl+C を押すと、プログラムは中断します。エラーにもなりません。
ファイル:
vbslib.vbs
Input
  Dim key : key = Input( "〜します。[Y/N]" )
  If key<>"y" and key<>"Y" Then   Exit Sub  ' ... Cancel
関連
input や pause 関数を使った場合、自動的にキー入力することもできます。
次のようにすると、input を呼び出したときに、自動的に [1][Enter][2][Enter] と入力します。
Sub  set_input( Keys as string )
(src)
でユーザーが入力する内容を、指定した内容で自動的に入力するようにします。
set_input  "1.2."
子プロセスを起動したら、set_input の内容は引き継がれません。/set_input オプションと
SetAutoKeysFromMainArg で、子プロセスに入力内容を指定してください。
関連
テスト
→ [T_UI_Auto] 自動入力のテスト
g_CUI.m_Auto_KeyEnter = "/"
set_input  "1/2/"
Enter に対応する文字をピリオドから変更したいときは、次のようにします。
オプションによる指定は無視されます。
を呼び出した後で、set_input を呼び出すと、/set_input
ファイル:
vbslib.vbs
cscript.exe を起動したときのパラメータに、/set_input オプションを指定すると、
input などでユーザーが入力する内容を、オプションに指定した内容で自動的に入力します。
  g_CUI.SetAutoKeysFromMainArg
cscript.exe  sample.vbs /set_input:1.2.
VBS のソースに必要な呼び出し
コマンドライン
(src)
ただし、main 関数の先頭などで g_CUI.SetAutoKeysFromMainArg を呼び出す必要があります。
→ [T_UI_Auto] 自動入力のテスト
関連
テスト
cscript.exe を起動したときのパラメータに、/set_input_enter オプションを指定すると、
/set_input に指定した文字のうち、/set_input_enter オプションで指定した文字は、Enter の
入力にします。
/set_input_enter オプションが指定されなかったときは、ピリオドが Enter の入力になります。
cscript.exe  sample.vbs /set_input:1.2. /set_input_enter:.
コマンドライン
(src)
g_CUI.m_Auto_DebugCount = 1
cscript.exe  sample.vbs /set_input:1.2. /set_input_debug:1
VBS のソース
コマンドライン
を指定したときに、1つずつ Enter キーを入力するまで待ちます。
(src)
関連
指定した値の回数目の入力から待ちます。
これにより、ユーザーの入力を自動的に行うときに、入力内容を確認しながら実行できます。
で cscript.exe を起動したプロセスで input を使うと、
標準入力待ちでハングアップするので、代わりに内部で、GUI から入力する
InputBox
が呼ばれます。
→ [T_ExecStdIn] Exec で起動したプロセスの標準入力
InputBox が呼ばれるかどうかは、スクリプトを起動したときに指定するコマンド
ライン・オプションに /GUI_input:1 を指定したかどうかで決まります。 RunProg
で、cscript を起動すると、/GUI_input:1 は、自動的に指定されます。
子プロセスで pause したとき、pause メッセージを子プロセスから受け取ったら
親プロセスで、Enter の入力待ちをします。 Enter を押したら、子プロセスの
標準入力にも Enter を転送します(EchoStream関数)。 自動入力するときは、
pause メッセージに少し手を加えて、親プロセスで待たないようにします。
input を呼び出したとき、コマンドライン・スクリプトでも、強制的に GUI から入力する
オプションです。
cscript Sample.vbs /GUI_input
起動コマンドの例:
テスト
参考
(src)
Function  InputPath( Prompt as string, Flags as integer ) as string
プロンプトを表示し、ユーザからファイルのパス(場所)の入力を待ちます。
【引数】
Prompt
Flags
表示する内容
0 または F_ChkFileExists など
ユーザが入力したパス、入力なし=""
返り値
ユーザは、 " "で囲んだパスを入力することができます。このとき、返り値は、" " を含みません。

相対パスを入力したら、g_start_in_path を基準とした相対パスとみなし、返り値は、絶対パスに
なります。 InputPath を呼び出す前に、g_start_in_path は、変更することができます。
サンプル
  Dim  path
  Dim  c : Set c = g_VBS_Lib
  echo "[SampleTool]"
  path = InputPath( "path>", c.CheckFileExists or c.CheckFolderExists or _
    c.UseArgument1 or c.AllowEnterOnly )
  If path = "" Then  path = GetPathOfClipboardText()
(src)
Flags 引数
[SampltTool]
path>aaa
not found
path>C:\
下記を設定します。 複数設定するときは、or してください。 c は g_VBS_Lib です。
c.CheckFileExists
c.CheckFolderExists
c.AllowEnterOnly
ファイルとして存在するかチェックします。
フォルダとして存在するかチェックします。
何も入力しなかったときに再入力を要求しません。 このとき、返り値=""
ファイル:
vbslib.vbs
関連
テスト
→ Test.vbs # T_InputPath_WorkFolder_File
サンプル画面
サンプル
  Dim  path, param

  If ArgumentExist( "Path" ) Then
    path = WScript.Arguments.Named.Item( "Path" )
    echo  "パス>"+ path
  Else
    path = InputPath( "パス>", Empty )
  End If

  param = input( "Param>" )
Linux のパスも入力できるようにするとき
Linux のパスは、オプションと解釈されてしまうため、/Path オプションを使って指定して
ください。
cscript  Sample.vbs /Path:/home/user1/file Param2
→ Test.vbs # T_InputCommand_WindowsParam
→ Test.vbs # T_InputCommand_LinuxParam
→ Test.vbs # T_InputPathArg
c.UseArgument1
c.UseArgument2
スクリプトを起動したときの第1パラメーターがあれば、それを入力とする
スクリプトを起動したときの第2パラメーターがあれば、それを入力とする
InputPath
Sub  InputCommand( LeadOrOpt as string or InputCommandOpt, Prompt as string,
                   Opt as variant, AppKey as AppKeyClass )
に入ります。 入力するコマンドは、呼び出す関数の名前です。
【引数】
LeadOrOpt
Prompt
リード文、または、オプション
プロンプトの表示内容。 Empty="番号またはコマンド"
Main 関数の AppKey 引数
AppKey
Main 関数の Opt 引数
Opt
(src)
Sub  main2( Opt, AppKey )
  InputCommand  "Document.svg を参照 (Google Chrome や Snap Note で見えます)", _
    "コマンド >", Opt, AppKey
End Sub

Sub  SyncSymbols( Opt, AppKey )
  echo  "SyncSymbols 関数が呼ばれました。"
End Sub
サンプル
実行画面
--------------------------------------------------------------------------------
Document.svg を参照 (Google Chrome や Snap Note で見えます)
コマンド >SyncSymbols
--------------------------------------------------------------------------------
SyncSymbols 関数が呼ばれました。
--------------------------------------------------------------------------------
Document.svg を参照 (Google Chrome や Snap Note で見えます)
コマンド >
FuncA コマンドを実行したところ
ユーザーが入力したコマンドと同じ名前の関数が呼ばれます。 たとえば、SymcSymbols と入力したら、
ImputCommand 関数の中から、GetRef 関数を使って、SymcSymbols 関数が呼ばれます。 呼ばれる
関数の引数は、main2 関数と同じ、Opt と AppKey にしてください。
InputCommand
SyncSymbols
Sub  Main( Opt, AppKey )
  Dim  o : Set o = new InputCommandOpt
    o.Lead = "Document.svg を参照 (Google Chrome や Snap Note で見えます)"
    Set o.CommandReplace = Dict(Array( "1","RunProgram", "2","InvestigateLog" ))
    Set o.MenuCaption = Dict(Array( "1","起動コマンド [%name%]" ))
  InputCommand  o, Empty, Opt, AppKey
End Sub

Sub  InvestigateLog( Opt, AppKey )
  Dim  path : path = InputPath( "ログ・ファイルのパス >", F_ChkFileExists )
  Dim  key  : key = input( "よろしいですか。[Y/N]" )
  If key<>"y" and key<>"Y" Then   Exit Sub  ' ... Cancel
  Investivate  path
  echo  "解析しました。"
End Sub
メニューから選択する
-------------------------------------------------------------------------------
Document.svg を参照 (Google Chrome や Snap Note で見えます)
 1. 起動コマンド [RunProgram]
 2. InvestigateLog
番号またはコマンド >2
-------------------------------------------------------------------------------
ログ・ファイルのパス >C:\Log\Test_log.txt
よろしいですか。[Y/N]y
解析しました。
下記はメニュー2を選んだところ。 2 の代わりに InvestigateLog も入力できます。
実行画面
→ T_InputCommand_Manually.vbs # main
テスト
Class  InputCommandOpt
  Public  Lead            '// as string
  Public  CommandReplace  '// as Dictionary of string
  Public  MenuCaption     '// as Dictionary of string
  Public  AllTestName     '// as string
End Class
InputCommand
コマンド >SyncSymbols
Sub  SyncSymbols( Opt, AppKey )
  echo  "SyncSymbols 関数が呼ばれました。"
End Sub
ImputCommand  Empty, "コマンド >"
C:\Log\Test_log.txt
vbslib.vbs
ファイル:
InputCommand 関数を呼び出すスクリプトは、起動するときに専用コマンドをパラメーターに指定すると、
ユーザの入力待ちにはならず、InputCommand 関数の中からすぐに専用コマンドに対応する関数を呼び
出すようになります。 関数から返ったら(InputCommand から返り)、スクリプトのプロセスは終了します。
専用コマンド名の次やそれ以降のパラメーター(上記の C:\folder\file.txt と y )は、内部で
に渡されて、自動的に入力するようになります。 ただし、Enter の入力は "." と記述するのではなく、
パラメーターの区切りが Enter の入力になります。 Enter のみの入力をしたいときは、下記のように
cmd.exe から起動して、"" を指定してください。
y
2
関連
→ T_InputCommand_Target2.vbs # [main2]
→ T_InputCommand_Target.vbs # [main2]
→ Test.vbs # T_InputCommand_Param
ショートハンド・プロンプトのテスト
  Dim  r
  r = RunProg( "cscript.exe  //nologo """+ SearchParent( "Prompt.vbs" )+_
     """ CommandA  param1 """"", "out.txt" )
  CheckTestErrLevel  r
  Assert  "out.txt", "T_ans.txt"
  del  "out.txt"
コマンド >CommandA
入力1 >param1
入力2 >
実行しました。
親フォルダーにある Prompt.vbs から起動できるショートハンド・プロンプトに、
CommandA コマンドを入力、入力1に param1 を入力、入力2に Enter のみ
入力するときの、テスト・スクリプトは、下記のようになります。
Prompt.vbs
CommandA
param1
""""
コマンド入力するときに、「AllTest」 と入力すると、InputCommandOpt クラスの CommandReplace に登録
した関数をすべて呼び出します。 コマンド名を 「AllTest」 以外にしたいときは、InputCommandOpt クラスの
AllTestName を設定してください。
  Dim  r
  r = RunProg( "cscript //nologo T_Target.vbs AllTest", "" )
  CheckTestErrLevel  r
参考
CommandA
param1
T_ans
Sub  CommandA( Opt, AppKey )
Dim dbg : dbg = Opt("command_debug")

If dbg Then g_CUI.m_Auto_KeyEnter = "/"
If dbg Then set_input  "C:\Folder\File1.txt"
  path = InputPath( "ファイルのパス >", F_ChkFileExists )
   :
End Sub

Sub  CommandA_debug( Opt, AppKey )
  Opt("command_debug") = True
  CommandA  Opt, AppKey
End Sub
Dim dbg : dbg = Opt("command_debug")

If dbg Then g_CUI.m_Auto_KeyEnter = "/"
If dbg Then set_input  "C:\Folder\File1.txt"
Sub  CommandA_debug( Opt, AppKey )
  Opt("command_debug") = True
  CommandA  Opt, AppKey
End Sub
下記のようにして、CommandA_debug コマンドを起動すると、入力する内容を自動的に入力します。
プロンプトのみ(メニュー項目なし)