我需要帮助来打印综合“摘要”字符串。我有一个执行程序的触发器:
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 :(得分: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命令解释器具有特殊含义的字符的环境变量的值。
@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
请参阅Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案,了解使用set "variable=value"
的原因。第一个双引号留给变量名称而不是等号右边。这引起了很大的不同,因为参考的答案详细解释了。
删除每个重定向运算符>>
左侧的空格字符,以避免在每行上将尾随空格写入文本文件。每个重定向操作符>>
的空格字符权限无关紧要,但在此处也会被删除。
有关延迟环境变量扩展的更多信息,请打开命令提示符窗口,运行set /?
并仔细阅读此命令的所有输出帮助页面。