我正在使用與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