2012-10-01 2 views
7

Windows 스크립트 (.vbs)를 사용하여 명령 줄 (cmd.exe)에서 간단한 명령의 결과를 얻고 싶습니다. 어떻게 이뤄지나요? 나는 좋은/간단한 예제 또는 설명을 찾을 수 없었습니다. "날짜"또는 "시간"명령을 사용하여 예제를 제공 할 수 있습니다. 예를 들면 :vbs 명령 줄 명령에서 결과를 얻는 방법

enter image description here

P.S. 나는 cmd.exe를 열어 명령을 보내는 스크립트 코드를 작성할 수있다.

감사합니다.

+0

다이어그램이 굉장하기 때문에 1을 더한 것입니다 : 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가 : 대신 당신은 사용자 상호 작용없이 특정 작업을 수행합니다 commandlines을 구성 할 수 있습니다, 대화 형 atprogram를 사용하고 계십니까? 이 같은 비 대화 형 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.EXEcmd.Terminate 통해 종료합니다.

+0

좋습니다. 작동합니다. 고마워요. 그러나 나는 그런 유선형 대답을 기대하지 않았습니다. 나는 단지 내가하려고하는 것을 설명 할 것이다. Atmel의 명령 행 기반 프로그래밍을 사용하여 일부 칩을 프로그래밍하고 싶습니다. 사용하기 쉽고 잘 작동합니다. 커맨드 셸을 가져 와서 SendKeys를 사용하여 명령을 보낼 수 있지만 Exec을 사용하여 명령을 포함하려고하면 창을 가져 오지만 명령은 삽입하지 않습니다. "/ c"는 실제로 무엇을하고 있습니까? 명령의 출력을 얻는 또 다른 방법이 있습니까? 프로그래밍이 성공했는지 여부를 알 수있는 방법이 필요합니다. – user1387865

+0

도움을 주셔서 감사합니다! 감사합니다. 나는 아직 성공하지 못했습니다. 어떤 이유로, Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c atprogram")을 보내면 "atprogram"명령을 입력하지 않고 터미널을 열면됩니다.몇 가지 시도했지만 명령을 실행하지 않습니다. 내가 SendKeys를 사용하도록 강요당한 것처럼 느껴지 긴하지만 터미널 창을 열어 두지 않으면 출력을 볼 수 없습니다. – user1387865

관련 문제