2014-12-25 4 views
0

으로 보내고 있습니다. 배치 파일에서 로그 파일로 호출되는 exe (commanline exe)의 출력을 리디렉션하려고합니다. 이 script에서 input.txt에 제공된 호스트 이름의 IP 주소가 result.txt로 리디렉션됩니다. 동일한 배치 스크립트 내에서 .exe를 실행하여 모니터링 도구에서 유지 관리 모드로 IP를 배치하려고합니다. 스크립트가 제대로 실행되고 예상대로 작업을 수행하지만 .exe에서 출력을 캡처하지 못합니다. 도와주세요. 내가 명령 프롬프트에서 직접 실행하는 경우 .EXE에서배치 스크립트 내의 .exe 출력을 txt 파일

@echo off 
setlocal enabledelayedexpansion 
set OUTPUT_FILE=result.txt 
>nul copy nul %OUTPUT_FILE% 
for /f %%i in (input.txt) do (
set SERVER_ADDRESS=ADDRESS N/A 
for /f "tokens=1,2,3" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
    if %%x==Pinging set SERVER_ADDRESS=%%y 
    if %%x==Reply set SERVER_ADDRESS=%%z 
    if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN) 
) 
echo !SERVER_ADDRESS::=!>>%OUTPUT_FILE% 
) 
start c:\MaintenanceMode.exe ON %OUTPUT_FILE% %USERNAME% >> "c:\result2.txt" 

출력 :

PS C:\> .\MaintenanceMode.exe ON C:\result.txt username 
Not an IP!! 
Reading IPs from File: C:\result.txt 
Valid Arguments 
System put into MM  Host# 10.*.*.* Status# Success 
System put into MM  Host# 10.*.*.* Status# Success 

답변

1

당신은 EXE를 START 명령의 출력을 리디렉션,하지만하지 않습니다.

start cmd /c c:\MaintenanceMode.exe ON %OUTPUT_FILE% %USERNAME% ^>^> "c:\result2.txt" 

그런데 왜 당신이 사용하는 START : 당신은 대부분의 새로운 CMD.EXE 세션을 실행하고 새로운 세션 내에서 발생하도록 리디렉션을 탈출

시작을 사용하고 출력을 재 지정하려면, ? exe를 직접 실행하면 훨씬 간단 해집니다 :

c:\MaintenanceMode.exe ON %OUTPUT_FILE% %USERNAME% >> "c:\result2.txt" 
관련 문제