我正在使用与DB2数据库交互的Windows应用程序。在我的应用程序中,我有通过命令行界面执行一些DB2命令的代码。我已经使用windowsAPI“ShellExecuteEx()”通过命令行执行这些DB2命令。“|”管道运算符不在C++的命令行中工作
以下是通过命令行编写执行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中被observered我只得到DB2命令,而不是日期和时间的结果。如果你看到上面的命令有“|”管道操作员和回声命令记录日期和时间test.log
请注意,如果我通过单独的命令行执行上面的DB2命令,即不通过代码。我能够查看日期和时间日志以及test.log中的DB2命令结果。以下是我通过命令行执行的完整命令。 DB2CMD/c/i/w DB2 UNCATALOG NODE DB_DATABASE“>>”test.log | echo%date%%time%>> test.log
根据我的说法,由于DB2命令通过代码成功执行,因此只有使用“|”管道运算符或回显命令。
感谢您的意见和建议的新方法。但是,如果您仔细查看代码。命令被激活的是“db2cmd”并且传递给它的参数是“/ c/w/i DB2 UNCATALOG NODE DB_DATABASE”>>“test.log | echo%date%%time%>> test.log”; 因此,请也建议我们如何能够使用系统库来做同样的事情,如果你能提出我在使用“|”时遇到的问题,管道操作员和回声。 谢谢 – decisive 2010-05-04 05:47:12
我希望找到类似db2cmd的东西,但没有看到它。我纠正了这个例子。 – wallyk 2010-05-04 06:15:05
感谢您提出这种方法。不过,如果你真的可以说出我在使用“|”做错了,运算符代码中,我无法在日志文件中获取日期时间 – decisive 2010-05-04 07:41:48