Windows 스크립트 (.vbs)를 사용하여 명령 줄 (cmd.exe)에서 간단한 명령의 결과를 얻고 싶습니다. 어떻게 이뤄지나요? 나는 좋은/간단한 예제 또는 설명을 찾을 수 없었습니다. "날짜"또는 "시간"명령을 사용하여 예제를 제공 할 수 있습니다. 예를 들면 :vbs 명령 줄 명령에서 결과를 얻는 방법
P.S. 나는 cmd.exe를 열어 명령을 보내는 스크립트 코드를 작성할 수있다.
감사합니다.
Windows 스크립트 (.vbs)를 사용하여 명령 줄 (cmd.exe)에서 간단한 명령의 결과를 얻고 싶습니다. 어떻게 이뤄지나요? 나는 좋은/간단한 예제 또는 설명을 찾을 수 없었습니다. "날짜"또는 "시간"명령을 사용하여 예제를 제공 할 수 있습니다. 예를 들면 :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가 : 대신 당신은 사용자 상호 작용없이 특정 작업을 수행합니다 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.EXE
을 cmd.Terminate
통해 종료합니다.
좋습니다. 작동합니다. 고마워요. 그러나 나는 그런 유선형 대답을 기대하지 않았습니다. 나는 단지 내가하려고하는 것을 설명 할 것이다. Atmel의 명령 행 기반 프로그래밍을 사용하여 일부 칩을 프로그래밍하고 싶습니다. 사용하기 쉽고 잘 작동합니다. 커맨드 셸을 가져 와서 SendKeys를 사용하여 명령을 보낼 수 있지만 Exec을 사용하여 명령을 포함하려고하면 창을 가져 오지만 명령은 삽입하지 않습니다. "/ c"는 실제로 무엇을하고 있습니까? 명령의 출력을 얻는 또 다른 방법이 있습니까? 프로그래밍이 성공했는지 여부를 알 수있는 방법이 필요합니다. – user1387865
도움을 주셔서 감사합니다! 감사합니다. 나는 아직 성공하지 못했습니다. 어떤 이유로, Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c atprogram")
을 보내면 "atprogram"명령을 입력하지 않고 터미널을 열면됩니다.몇 가지 시도했지만 명령을 실행하지 않습니다. 내가 SendKeys를 사용하도록 강요당한 것처럼 느껴지 긴하지만 터미널 창을 열어 두지 않으면 출력을 볼 수 없습니다. –
user1387865
다이어그램이 굉장하기 때문에 1을 더한 것입니다 : o –