2010-06-07 4 views
0

상당히 기본적인 .BAT 파일이어야하는 것을 작성하는 데 도움이 필요합니다.다른 프로그램이로드/초기화되고 나서 명령을 실행할 때까지 기다리는 배치 파일?

메인 프로그램을로드하지만 프로그램을로드하고 초기화하는 데 20 초 정도 걸립니다.

위의 프로그램과 상호 작용할 수있는 다른 명령 줄 API가 있지만 분명히 위의 프로그램이로드되고 초기화 될 때까지는 시도 할 필요가 없습니다.

프로그램이 실행되고 있지 않으면 명령 줄 API가 정확하게이 문자열을 반환합니다. 그렇지 않으면 그냥 작동하고 종료됩니다. 쉬운.

그래서 API 명령을 실행하기 전에 위의 코드가로드되거나 초기화 될 때까지 기다려야합니다.

수면을 취하거나 거기에서 기다리십시오.하지만 좀 더 견고한 것이 필요합니다. ~ 20 초 대기가 반드시 일치하지는 않습니다.

응답이 만족할 때까지 명령 줄 API를 반복 실행하는 방법은 무엇입니까?

j

답변

0

물론. 그러나 로딩이 아직 완료되지 않았 음을 나타내는 메시지 문자열 대신 적절한 종료 코드를 고려해야합니다. 산출물이 거기에 국한되지 않는다면.

어쨌든, 여기에 우리가 간다 :

:loop 
yourcommand.exe | findstr MAGIC STRING SIGNIFYING LOADING NOT YET COMPLETE >nul 2>&1 
if not errorlevel 1 goto loop 

이 단순히 한 종료 코드로 0이 반환 findstr로 시도 (이 문자열을 발견 의미). 그러나이와

두 가지 문제 :

  1. 그것은 자원 돼지입니다. , 그것은 이후의 모든 출력을 먹는이 최대 한 번 (결국) 의도 한 명령을 실행하는 동안

    ping -n 1 ::1 >nul 2>&1 
    
  2. 을 : 당신은 다른 모든 초 정도 대신 계속 그 일을하려고 거기에 잠을 넣어한다 그것을 findstr에 파이프하십시오. 당신이 해결하기 어려운 손에 tee가 없다면 (이 출력을 통해 for 루프를 포함하는 것이며, findstr 각 라인을 확인하는 - 당신이 거기에 가고 싶지 않아, 날 믿어

    이 있다면 옵션이 될 수 있습니다. 귀하의 명령에 대한 방법을 확인하고 다음 루프를 호출 한 후 실제 명령을 발행합니다 (프로그램이 작동 중일 때 존재). 그러면 모든 출력을 행복하게 기록 할 수 있습니다. 그러나 대화중인 프로그램 당신은 또 다른 문제를 가지고 아래로 루프를 종료하고 실제 명령으로 프로그램을 실행 사이의 이동에.

+0

좋아는 여기 궤도에, 나는 그것을 좋아한다. 내가 물어 봐도 무엇을 "2> & 1> " 하고있다? –

+0

오류 출력 (스트림 2)을 스트림 1 (stdout)이 진행되는 동일한 위치로 리디렉션합니다. 이 경우 NUL. NUL로 리디렉션하면 실제로 필요하지 않습니다. 지금까지는 근육 기억 만합니다. 하지만 파일로 리다이렉트한다면'foo 1> a.txt 2> b.txt'를 할 수 없다. 하나의 스트림 만 파일에 들어갈 수 있기 때문이다 (쓰기 위해 두 번 열 수는 없다).뒤늦은 견해로, 나는'findstr'이 여기에 stderr에 뭔가를 쓸 것이라고 생각하지 않습니다 - 다시 말하자면, 양쪽 모두를 리디렉션하는 것은 저를위한 근육 기억입니다 :-) – Joey

관련 문제