2016-11-05 8 views
0

옴니버스 "요약"문자열을 인쇄하는 데 도움이 필요합니다. 나는 프로 시저를 실행하는 트리거가 : 트리거가 중요한 노드, 심각도, alertkey의 값을 전달IBM Tivoli Netcool Omnibus의 요약이 왜 완전하게 인쇄되지 않습니까?

begin 

for each row critical in alerts.status where critical.AlertKey = 'DISK_USAGE_CRIT'   
begin 
execute send_email(critical.Node, critical.Severity, critical.AlertKey, 'NetcoolEmail', critical.Summary, 'WINITMSVR631'); 
end; 
end 

그, 'NetcoolEmail', send_email라는 이름의 프로 시저에 매개 변수로 요약 및 호스트 이름입니다.

(node char(1), severity int, situation char(1), email char(1), summary char(1), hostname (1)). 

이 절차는 다음 배치 파일의 변수에 해당 파라미터 값을 전달한다 :

시술 체이다. 예상대로 다른 사람이 인쇄되는 동안
set node=%1 
set situation=%3 
set summary=%5 
echo %node% >> C:\IBM\logtest.txt 
echo %situation% >> C:\IBM\logtest.txt 
echo %summary% >> C:\IBM\logtest.txt 

나는 모든 변수를 에코 텍스트 파일로 리디렉션

summary 문자열이 잘립니다.

이것은 완전히 인쇄되어있는 경우 요약 변수가 모습입니다 :

DISK_USAGE_CRIT[(%_Used>=1 AND WTLOGCLDSK.INSTCNAME AND Disk_Name="C:") ON Primary:WINSVR2K8:NT ON C: (%_Used=41 Disk_Name=C:)] 

그리고 아직이,이 같이 인쇄됩니다 :

DISK_USAGE_CRIT[(%_Used 

가 나머지가 인쇄되지 않습니다.

왜 요약 문자열이 완전히 출력되지 않습니까?

+0

'% summary %'는 이스케이프해야하는 문자를 포함합니다 (예 :'>' – DavidPostill

+0

). 안녕하세요, 데이빗 님, 요약을 완전히 인쇄하는 방법이 있습니까? 감사합니다 –

+0

'summary = "% 5"' – DavidPostill

답변

0

각 백분율 기호 %은 명령 프로세스 내에서 리터럴 문자로 해석되어야하며 환경 변수 참조의 시작/끝으로 해석되어서는 안됩니다. 시작 부분에 따옴표와 마지막 매개 변수로 끝에 큰 따옴표로

"DISK_USAGE_CRIT[(%_Used>=1 AND WTLOGCLDSK.INSTCNAME AND Disk_Name="C:") ON Primary:WINSVR2K8:NT ON C: (%_Used=41 Disk_Name=C:)]" 

, 각 %%%로 교체 정말 필요가 없습니다 :

그러나 요약 문자열은 다음과 같이 배치 파일에 전달되는 경우

배치 파일에서 사용하는 경우 추가로 지연된 환경 변수 확장.

>은 큰 따옴표가있는 문자열에서 찾을 수없고 지연된 환경 변수 확장을 사용하지 않는 경우 command redirection operator으로 해석됩니다.

따라서 Windows 명령 인터프리터에 특별한 의미를 갖는 문자가 포함 된 환경 변수의 값을 반향 출력 할 때 지연 확장을 사용해야합니다. Why is no string output with 'echo %var%' after using 'set var = text' on command line?

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
set "node=%~1" 
set "situation=%~3" 
set "summary=%~5" 
echo !node!>>C:\IBM\logtest.txt 
echo !situation!>>C:\IBM\logtest.txt 
echo !summary!>>C:\IBM\logtest.txt 
endlocal 

참조 대답 set "variable=value"를 사용하는 이유. 첫 번째 큰 따옴표는 등호의 오른쪽이 아니라 변수 이름으로 남습니다. 이것은 참조 된 대답이 자세히 설명 할 때 큰 차이를 만듭니다.

각 리디렉션 연산자 >>의 왼쪽에 공백 문자가 없으므로 각 줄에 텍스트 파일이 쓰이지 않습니다. 각 방향 지정 연산자 >>의 공백 문자는 중요하지 않지만 여기에도 제거됩니다.

지연된 환경 변수 확장에 대한 자세한 내용은 명령 프롬프트 창을 열고 set /?을 실행하고이 명령의 모든 출력 도움말 페이지를주의 깊게 읽으십시오.

+0

안녕하세요 mofi, 당신의 제안을 가져 주셔서 감사합니다. 난 이미 귀하의 코드와 함께 내 배치를 업데이 트하지만 그것은 또한 '주전과 같은 값을 반환합니다 : WINITMSVR631 : NT' 'DISK_USAGE_CRIT' 'DISK_USAGE_CRIT [(% _ 그것은 여전히 ​​요약 본문을 인쇄하지 않았습니다.) 감사합니다 –

+0

하시기 바랍니다 '@echo % * >> C : \ IBM \ logtest.txt'의 배치 파일을 사용하여 요약 문자열을 배치 파일로 전달하는 방법을 확인하십시오. 텍스트 파일에 요약 문자열을 작성하지 않으면 주변의 큰 따옴표를 사용하면 배치 파일에 잘못된 문자열을 전달할 수 있습니다. 큰 따옴표를 사용하지 않아도됩니다. – Mofi

+0

안녕하세요. mofi, 전 문자열 전달에 성공했으며 인쇄했습니다. logtest.txt. 하지만 요약본을 전자 메일 본문으로 만든 다음 blat.exe로 보내면 전자 메일이 전송되지 않고 있습니까? 요약이 너무 길기 때문입니까? 감사합니다. mofi –