在“child.cmd”文件中,我有以下命令:
DTEXEC.EXE /FILE "\"%~dp0..\SSIS Packages\%stepName%.dtsx\"" /CONNECTION DestinationConnectionOLEDB;"\"Data Source=%serverName%;Initial Catalog=%databaseName%;Provider=%databaseProvider%;%security%;Auto Translate=false;\"" /CONNECTION SourceConnectionExcel;"\"Provider=%excelProvider%;Data Source=%~dp0..\Excel Import Files\BAs Code Tables.xlsx;Extended Properties=%extendedProperties%;HDR=YES;\"" /CHECKPOINTING OFF /REPORTING %reporting% > "%~dp0..\Logs\Import\%stepName%.txt"
本质上,我使用 DTEXEC.EXE 执行 SSIS 包,并将输出发送到文本文件。如果我双击“child.cmd”,一切都会很好。
但是,如果我尝试从另一个批处理文件中调用“child.cmd”,比如“parent.cmd”,它就不再起作用了。我的“parent.cmd”文件如下所示:
call "%~dp0""Batch Files\child.cmd"
当我运行“parent.cmd”时,我试图在“child.cmd”文件中传递给 DTEXEC.EXE 的参数似乎不再是相同的格式,这会导致错误:
Option "Files\..\SSIS" is not valid.
其中“Files..\SSIS”是 /FILE 文件路径输入的一部分。该路径的“文件”部分之前有一个空格。有谁知道这里发生了什么?
注意:由于有空格,很多变量都返回双引号中的文本。我觉得任何有空间的地方都是导致问题的原因。我不知道为什么仅在尝试将其作为子批次运行时才出现问题。
编辑: “child.cmd”是比“parent.cmd”更深的文件夹。我已经更新了上面我在“parent.cmd”中调用“child.cmd”的代码。此外,我没有在我的 cmd 文件中设置 CD,而且我的谷歌搜索似乎表明,当你不知道要从哪个文件位置运行“parent.cmd”时,这样做并不容易,就像案例在这里。