2012-10-01 6 views
7

Windowsスクリプト(.vbs)を使用してコマンドライン(cmd.exe)から簡単なコマンドの結果を取得します。これはどうですか?私は良い/簡単な例や説明を見つけることができませんでした。 "date"や "time"コマンドを使って例を挙げることができます。 のような:vbsコマンドラインコマンドから結果を取得する方法

enter image description here

P.S. cmd.exeを開いてコマンドを送信するスクリプトコードを書くことができます。

ありがとうございます!

+0

ダイアグラムが素晴らしいからです:o –

答えて

10

疑問がある場合は、documentationをお読みください。

Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c date /t") 
Do While p.Status = 0 
    WScript.Sleep 100 
Loop 
WScript.Echo p.StdOut.ReadAll 

編集:Exec()を使用する場合は、あなたがいない(とにかく入力を渡すのではなく、信頼性の低い方法です)SendKeys()を経て、.StdIn記述子を介して入力を渡すあなたは、おそらくこのような何かをしたいです。

%COMSPEC%cmd.exeのフルパスと/cオプションとシステム環境変数であるcmd.exe出口を終了するコマンド(この例ではdate /t)の後に行います。

終了コードでコマンドが成功/失敗を示す場合は、コマンド終了後にExitCodeプロパティを確認できます。

If p.Status <> 0 Then WScript.Echo p.ExitCode 

EDIT2:の代わりに対話的にatprogramを使用するには、ユーザーの操作なしで、特定のタスクを実行しますcommandlinesを構築することができますか?このような何かがうまくいくかもしれない非対話型commandlinesで:

prompt = "C:\>" 
atprogram_cmdline_1 = "atprogram.exe ..." 
atprogram_cmdline_2 = "atprogram.exe ..." 
'... 

Function ReadOutput(p) 
    text = "" 
    Do Until Right(text, Len(prompt)) = prompt 
    text = text & p.StdOut.Read(1) 
    Loop 
    ReadOutput = text 
End Function 

Set cmd = CreateObject("WScript.Shell").Exec("%COMSPEC% /k") 
ReadOutput cmd ' skip over first prompt 

cmd.StdIn.WriteLine(atprogram_cmdline_1) 
WScript.Echo ReadOutput(cmd) 
cmd.StdIn.WriteLine(atprogram_cmdline_2) 
WScript.Echo ReadOutput(cmd) 
'... 

cmd.Terminate ' exit CMD.EXE 

%COMSPEC% /kコマンドを実行せずに、コマンドプロンプトを起動します。 /kは、それが閉じないようにします。自動的に閉じないので、ここでWhile p.Status = 0ループを使用することはできません。コマンドが完了するまでに時間が必要な場合は、WScript.Sleep秒が必要です。

経由でcmd.StdIn.WriteLineCMDインスタンスでコマンドラインを実行できます。関数ReadOutput()は、次のプロンプトが表示されるまでStdOutの出力を読み取ります。読み取り操作はブロックされているため、プロンプトを探す必要があるため、単に「まだ印刷済みのものをすべて読み取る」とは言えません。

CMD.EXEを終了した後、cmd.Terminateで終了します。

+0

それはうまくいきます、ありがとう、しかし、私はそのような合理的な答えを期待していなかったと思います。私は何をしようとしているのかを説明します。私はAtmelのコマンドラインベースのプログラミングを使っていくつかのチップをプログラムしたいと思っています。本当に使いやすく、うまく機能します。コマンドシェルを起動してSendKeysを使用してコマンドを送信できますが、Execを使用してコマンドを含めると、ウィンドウが表示されますが、コマンドは挿入されません。 "/ c"は実際に何をしていますか?コマンドの出力を得る別の方法はありますか?プログラミングが成功したかどうかを知る方法が必要です。 – user1387865

+0

助けてくれてありがとう!それは有り難いです。私はまだ成功していない。何らかの理由で、Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c atprogram")を送信すると、コマンド "atprogram"を入力せずに端末を開くだけです。私はいくつかのことを試しましたが、コマンドを実行しません。私はSendKeysを使用するように強制されているように感じるが、ターミナルウィンドウを開いたままにしない限り、出力を見ることができない。 – user1387865