cmd から vbscript を実行できません

cmd から vbscript を実行できません

私はサーバーにpingするスクリプトを入手しました。これを実行するには、CMDでファイルが配置されているパスに移動し、次の行を入力します。

FileName ip logname.log

これは私が実行するスクリプトです

hostIp      = wscript.arguments(0)
logfilename = wscript.arguments(1)
Set fso     = CreateObject("Scripting.FileSystemObject")
Set Shell   = CreateObject("Wscript.Shell")
' OpenTextFile Method requires a Const value
' (Over)Write = 2  Append = 8   
Set logfile = fso.OpenTextFile(logfilename, 8, True)
shellstring = "%comspec% /c ping -t -f -l 32 -w 1000 " & hostIP
Set oExec   = Shell.Exec(shellstring)
wscript.echo "Ping Error log With Timestamp - Ctrl + C to halt"
Do While oExec.StdOut.AtEndOfStream <> True
      pingline = Date & " " & Time & " " & oExec.StdOut.ReadLine
'      If InStr(pingline, "TTL=") = 0 Then
         logfile.WriteLine(pingline)
'      End If
Loop

しかし、今では実行するたびに、実行するのではなくファイルを開くだけになってしまい、動作しなくなりました。この問題を解決する方法について何かアイデアはありますか?

答え1

次の構文を使用する場合:

Filename ip logname.log

アクションはレジストリから取得されます。

私のコンピューターには次のものがあります。

  1. コンピューター\HKEY_CLASSES_ROOT.vbs
    • (デフォルト) REG_SZ VBSFile
  2. コンピューター\HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command
    • (デフォルト) REG_EXPAND_SZ "%SystemRoot%\System32\WScript.exe" "%1" %*

偶然に任せたくない場合は、コマンドラインにWScriptまたはCScriptを明示的に含める必要があります。例:

CScript Filename ip logname.log

CScript と WScript の最も顕著な違いは、の動作ですWScript.Echo。CScript では、テキストは stdout にエコーされ、非ブロッキングです。WScript では、テキストはモーダル ダイアログ ボックスに表示され、ブロッキングです。前者は、(1) コマンド プロンプトからスクリプトを呼び出す場合、(2) スケジュールされたタスクからスクリプトを呼び出す場合に一般的に好まれます。

関連情報