我正在使用与DB2数据库交互的Windows应用程序。在我的应用程序中,我有代码通过命令行界面执行一些DB2命令。我已经使用windowsAPI“ShellExecuteEx()”通过命令行执行这些DB2命令。
以下是为通过命令行执行DB2命令而编写的代码。
string command = "/c /w /i DB2 UNCATALOG NODE DB_DATABASE ">>" test.log | echo
%date% %time% >> test.log";
SHELLEXECUTEINFO shellInfo;
ZeroMemory(&shellInfo, sizeof(shellInfo));
shellInfo.cbSize = sizeof(shellInfo);
shellInfo.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS;
shellInfo.lpFile = "db2cmd";
shellInfo.lpParameters = command.c_str();
if (ShellExecuteEx(&shellInfo))
{
WaitForSingleObject(shellInfo.hProcess, INFINITE);
CloseHandle(shellInfo.hProcess);
bStatus = true;
}
else
{
bStatus = false;
}
代码执行成功,但是如果观察到test.log,我只得到DB2命令的结果,而不是日期和时间。如果你看到上面的命令有“|”管道运算符和echo命令在test.log中记录日期和时间
请注意,如果我通过单独的命令行执行上面的DB2命令,即不通过代码执行。我能够在test.log中查看日期和时间日志以及DB2命令结果。以下是我通过命令行执行的完整命令。 DB2CMD / c / i / w DB2 UNCATALOG NODE DB_DATABASE“>>” test.log | echo%date %% time%>> test.log中
根据我的说法,因为DB2命令通过代码成功执行,所以仅使用“|”有问题管道运算符或echo命令。
答案 0 :(得分:2)
管道机制用于将一个程序的输出作为输入传递给下一个程序。我想在你的情况下,&& separator会更合适。
尝试让cmd处理多个语句的执行:
cmd /c "db2cmd ... && echo ..."
答案 1 :(得分:0)
管道运算符由命令shell执行。获得该功能的最简单方法是使用system()库函数。
否则,您可以在命令完成(修订)后以编程方式将时间戳附加到文件中:
system ("db2cmd DB2 UNCATALOG NODE DB_DATABASE >>test.log");
system ("echo %date% %time% >> test.log");