Windowsスクリプト(.vbs)を使用してコマンドライン(cmd.exe)から簡単なコマンドの結果を取得します。これはどうですか?私は良い/簡単な例や説明を見つけることができませんでした。 "date"や "time"コマンドを使って例を挙げることができます。 のような:vbsコマンドラインコマンドから結果を取得する方法
P.S. cmd.exeを開いてコマンドを送信するスクリプトコードを書くことができます。
ありがとうございます!
Windowsスクリプト(.vbs)を使用してコマンドライン(cmd.exe)から簡単なコマンドの結果を取得します。これはどうですか?私は良い/簡単な例や説明を見つけることができませんでした。 "date"や "time"コマンドを使って例を挙げることができます。 のような:vbsコマンドラインコマンドから結果を取得する方法
P.S. cmd.exeを開いてコマンドを送信するスクリプトコードを書くことができます。
ありがとうございます!
疑問がある場合は、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.WriteLine
CMD
インスタンスでコマンドラインを実行できます。関数ReadOutput()
は、次のプロンプトが表示されるまでStdOut
の出力を読み取ります。読み取り操作はブロックされているため、プロンプトを探す必要があるため、単に「まだ印刷済みのものをすべて読み取る」とは言えません。
CMD.EXE
を終了した後、cmd.Terminate
で終了します。
それはうまくいきます、ありがとう、しかし、私はそのような合理的な答えを期待していなかったと思います。私は何をしようとしているのかを説明します。私はAtmelのコマンドラインベースのプログラミングを使っていくつかのチップをプログラムしたいと思っています。本当に使いやすく、うまく機能します。コマンドシェルを起動してSendKeysを使用してコマンドを送信できますが、Execを使用してコマンドを含めると、ウィンドウが表示されますが、コマンドは挿入されません。 "/ c"は実際に何をしていますか?コマンドの出力を得る別の方法はありますか?プログラミングが成功したかどうかを知る方法が必要です。 – user1387865
助けてくれてありがとう!それは有り難いです。私はまだ成功していない。何らかの理由で、Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c atprogram")
を送信すると、コマンド "atprogram"を入力せずに端末を開くだけです。私はいくつかのことを試しましたが、コマンドを実行しません。私はSendKeysを使用するように強制されているように感じるが、ターミナルウィンドウを開いたままにしない限り、出力を見ることができない。 –
user1387865
ダイアグラムが素晴らしいからです:o –