私はサーバーに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
アクションはレジストリから取得されます。
私のコンピューターには次のものがあります。
- コンピューター\HKEY_CLASSES_ROOT.vbs
- (デフォルト) REG_SZ VBSFile
- コンピューター\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) スケジュールされたタスクからスクリプトを呼び出す場合に一般的に好まれます。