【发布时间】:2016-09-23 15:42:03
【问题描述】:
我有一个复杂的批处理脚本,其中涉及多个 BCP 命令,这些命令会使用平面文件数据加载 SQL Server。我正在使用将命令结果记录到日志文件中的分支语句。这一切都很好。
结果也会作为成功或失败记录在 SQL 表中。我想做的是,在失败时,使用我认为是简单的重定向将日志文件的内容插入到 SQL 日志表中。它不工作。
这是我在 Win Server 2012 环境中的批处理文件中所做的:
BCP (the parameters here don't matter) >> %LogFile% (
MOVE %FileName% to Archive/%FileName%
sqlcmd -E -Q "EXEC spImportLog 'SUCCESS', %FileName%, ''
) || (
SET /p LogText=<%LogFile%
sqlcmd -E -Q "EXEC spImportLog 'FAILED', %FileName%, %LogText%
)
此代码执行没有错误。声明的真实部分工作正常。 错误部分执行得很好,但我最终得到的是空字符串而不是 %LogText% 的内容。
当我从命令提示符运行它时,SET 看起来像这样:
SET /p LogText
%LogFile% 是一个变量,因为它在运行时根据今天的日期动态命名。我不知道小于号后面的 0 来自哪里,或者它是否是我的问题的根源。有什么想法吗?
【问题讨论】:
-
我猜在最后一个
(之前的BCP命令行末尾缺少&&...BCP是批处理文件吗?如果是这样,请在其前面加上call。对于LogText,您需要delayed expansion,因为您正在修改并在同一代码块中读取该变量... -
是的,在 ( 之前有一个 &&。我用 BCP 编辑了我的原始代码(我的参数)>> %LogFile% && ( true 语句) || (SET /p LogText=
-
延迟扩展设置在批处理文件的开头并在末尾停止。它仍然无法正常工作。
-
请注意,
SET /p LogText=<%LogFile%仅将 first 行文本分配给变量;你可能期待别的东西......?
标签: file variables batch-file text set