我们使用ExportPackage命令行实用程序(记录为here),为导出元数据项目提供了自动化流程。
该命令被写入.bat文件,然后通过文件管道执行(在SAS中)。
我们最近在导出多个对象(大约60个)时发现了一种奇怪的行为,我们认为这是由批处理命令的windows line length limitation引起的。
基本上,一个字符将被删除(意味着找不到特定的对象),但该行的其余部分(在8191个字符之后)成功执行。
有兴趣知道:
-objects
参数,而不是空格分隔的值?答案 0 :(得分:1)
我怀疑你会喜欢这个答案。您链接的文档指出,具有相同名称的现有包文件将被覆盖,并且未提及任何附加到文件的方式。
您可以使用#include <cmath>
int MyFunction(int number)
{
int numDigits = static_cast<int>(std::log10(number)) + 1;
std::vector<int> myarr(numDigits);
}
个字符在批处理文件中的多行上拆分命令,但重新组合后,这仍然无法绕过整个8191字符限制。
因此,您需要执行以下一项或多项操作:
^
参数强制导出实用程序导出其所有对象的依赖关系。免责声明:我从未真正使用过相关的导出工具。
答案 1 :(得分:0)
我通过在8191点插入一个虚拟角色解决了这个问题。请注意,此8191长度限制是命令AFTER“ExportPackage”中的所有内容。
因此,一种解决方案如下:
/* If the ExportPackage command line is more than 8191 characters, it will
fail due to a windows line length limitation. To avoid this, add a
hash character at the 8191 point.
*/
%let log= \path\to\my.log;
%let profile= -profile "\path\to\my\dummy\profile.swa";
%let package= -package "\path\to\my\desired.spk";
%let str=&my_list_of_objects; /* previously defined */
%let breakpoint=%eval(
8191 - %length(%str(&profile &package -objects))-1);
%if %length(&str)>=&breakpoint %then %let objects=%substr(
&str,1,&breakpoint-1)#%substr(&str,&breakpoint,%length(&str)-&breakpoint+1);
%else %let objects=&str;
然后可以执行命令:
ExportPackage &profile &package &objects -subprop -includeEmptyFolders -log &log
什么不行?
在8191点的引号之间插入空格,例如:
"object1" "object2"
忽略了额外的空格,仍然从第二个对象中删除了一个字符。
在文字中插入空格,例如:
"object1 " "object2"
未找到对象1,可能是由于尾随空格。