2016-05-09 12 views
1

私はアドレスをpingして結果をtxtファイルに保存する簡単なスクリプトを作っています。IPにポップアップメッセージを送り、結果をtxtファイルに保存する - VBS

目的がどのように知らない素人のユーザーのためにそれを便利にするためだけにある:

  1. は、「ファイル名を指定して実行」ボックスを開きます。
  2. open cmd;
  3. アドレスにpingを実行します。
  4. コピー結果;
  5. 過去のtxtファイル。

これまでのところ、私はこの.batファイルを作成しましたが、より多くの機能とより優れたビジュアルを実現するために、これをvbs上に置いていきたいと考えていました。

  1. 保存のping結果: - VBSスクリプトを使用して -

    .BATアプローチ

    @ECHO OFF 
    :LOOPSTART 
    time /T >> PingTest.txt 
    ping 1.1.1.1 -n 100 >> %userprofile%\Desktop\PingTest.txt 
    exit 
    GOTO LOOPSTART 
    

    .VBSは私がいる

    Dim WshShell, i 
    Set WshShell = CreateObject("WScript.Shell") 
        WshShell.Popup "This program will run a connectivity test using PING", 5, "PING TEST!" 
    
    Dim strHost, strFile 
    
    strHost = "1.1.1.1" 
    strFile = "ping_test.txt" 
    
    PingCall strHost, strFile 
    
    Sub PingCall (strHost, outputfile) 
        Dim Output, Shell, strCommand, ReturnCode 
    
        Set Output = CreateObject("Scripting.FileSystemObject").OpenTextFile(outputfile, 8, True) 
        Set Shell = CreateObject("wscript.shell") 
        strCommand = "ping -n 100 " & strHost 
        While(True) 
          WshShell.Popup "Please, wait while test is being executed...", 1, "Test Running" 
         ReturnCode = Shell.Run(strCommand, 0, True) 
        Wend 
    End Sub 
    

    問題のアプローチ.txtファイル。

  2. テストが実行されていることを示すメッセージを表示します。私は がまだ送信されているパケット数を表示するか、またはボックスを持っているかのどちらかを表示したいです。 テストが終了しました。

これだけです。

私はあまりにも複雑ですか?

答えて

1

からコードを盗むことができます。

Option Explicit 
Dim ws,fso,TmpLogFile,Logfile,MyCmd,Webaddress,Param 
Set ws = CreateObject("wscript.Shell") 
Set fso = CreateObject("Scripting.FileSystemObject") 
TmpLogFile = "TmpFile.txt" 
LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "log" 
If fso.FileExists(LogFile) Then fso.DeleteFile LogFile 
webaddress = "www.stackoverflow.com" 
Param = "-n 10" 
MyCmd = "Title Ping to " & DblQuote(Webaddress) &_ 
" & Color 9B & Mode con cols=75 lines=3 & Echo Please wait a while the ping to " & DblQuote(Webaddress) & " is in progress ... & Time /T > "& TmpLogFile &_ 
" & Ping " & Param & " " & Webaddress & " >> "& TmpLogFile &_ 
" & cmd /U /C Type " & TmpLogFile & " > " & LogFile & " & Del " & TmpLogFile & "" 
ws.Popup "This program will run a connectivity test using PING",5,"PING TEST!",vbInformation 
Call Run(MyCmd,1,True) 
ws.run LogFile 
'********************************************************************************************** 
Function Run(StrCmd,Console,bWaitOnReturn) 
    Dim ws,MyCmd,Result 
    Set ws = CreateObject("wscript.Shell") 
'A value of 0 to hide the console 
    If Console = 0 Then 
     MyCmd = "CMD /C " & StrCmd & "" 
     Result = ws.run(MyCmd,Console,bWaitOnReturn) 
     If Result = 0 Then 
      'MsgBox "Success" 
     Else 
      'MsgBox "An unknown error has occurred!",16,"An unknown error has occurred!" 
     End If 
    End If 
'A value of 1 to show the console 
    If Console = 1 Then 
     MyCmd = "CMD /c " & StrCmd & "" 
     Result = ws.run(MyCmd,Console,bWaitOnReturn) 
     If Result = 0 Then 
      'MsgBox "Success" 
     Else 
      'MsgBox "An unknown error has occurred!",16,"An unknown error has occurred!" 
     End If 
    End If 
    Run = Result 
End Function 
'********************************************************************************************** 
Function DblQuote(Str) 
    DblQuote = Chr(34) & Str & Chr(34) 
End Function 
'********************************************************************************************** 
+0

あなたのコードは素晴らしいです。それはまさに私が必要なものです。それは私がやったのと同じことですが、あなたと同じくらい良いことはしません。ありがとうございました。ちなみに、 "MyCmd"(cmd/c Title&Color&Mode&Echo)の "Echoed"というメッセージに新しい行を追加できますか?私は&vbNewLine&二重引用符の有無にかかわらず、新しいメソッド/引数(?)の後に来るものを認識するので動作しませんでした。 –

2

あなたはWshScriptExecオブジェクトがWshShellオブジェクトのExecメソッドによって返される

を返すWshShell.execを使用する必要がショートカット

cmd /c (Ping 127.0.0.1 > testPing.txt) & (date /t >> testPing.txt) 

にこの行を入れることができます。 Execメソッドは、スクリプトまたはプログラムの実行が終了するか、またはスクリプトまたはプログラムの実行が開始される前に、WshScriptExecオブジェクトを返します。

(ヘルプから)それはあなたがテキストである場合であるSTDOUTへのアクセスを提供します。その上にReadAllを実行します。

しかしVBScriptのは、100回を行うためにpingを実行

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 

Set colItems = objWMIService.ExecQuery("Select * From win32_PingStatus where address='104.43.195.251'") 
For Each objItem in colItems 
    msgbox "Status" & objItem.statuscode & " Time " & objItem.ResponseTime 
Next 

使用を所有しています行うことができます。プロパティは、コマンドプロンプトで、利用可能なものにヘルプについて

Do while Counter < 100 
    Counter = Counter + 1 
    ...Ping code here ... 
Loop 

wmic PATH win32_PingStatus get /? 

PingStatusは、任意のメソッドを持っていませんが、それは

wmic PATH win32_PingStatus call /? 

をした場合は、配置する必要があるだろうスクリプトをHTA(基本的にはscript.htaという名前のWebページ)にコピーし、Webページをカウンタで更新します。あなたは、このコードで遊ぶことができ、ここでhttps://msdn.microsoft.com/en-us/library/ms976290.aspx

+0

あなたの答えは素晴らしいです。私はあなたのアイデアとコードを理解することができました。また、私に関連リソースを提供しました。あなたは私に指示を与えました。ありがとうございました。ここの唯一の問題は私です。私の知識の欠如は、私が長すぎるために壁に向かって頭を叩くように導くだろう。情報と指針を与えることは良いことですが、時にはそれを必要とせず、より簡単なアプローチが必要になることもあります。これと、これと、このように、あるいは@Hackooのような解決自体があります。ありがとうございました。 –

関連する問題