У меня есть приложение Windows, взаимодействующее с базой данных DB2. В моем приложении у меня есть код для выполнения некоторых команд DB2 через интерфейс командной строки. Я использовал windowAPI «ShellExecuteEx()» для выполнения этих команд DB2 через командную строку."|" оператор pipe не работает в командной строке в 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, а не дата и время. Если вы видите указанную выше команду, есть «|» оператор трубы и команда echo для регистрации даты и времени в test.log
Обратите внимание, что если я выполню над командой DB2 через отдельную командную строку, то есть не через код. Я могу просмотреть журнал даты и времени вместе с результатом команды DB2 в test.log. Ниже приведена полная команда, которую я выполнил через командную строку. 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
Я ожидал найти что-то вроде db2cmd, но не видел. Я исправил этот пример. – wallyk
Спасибо за предложение такого подхода. Однако было бы неплохо, если бы вы действительно могли сказать, что я делаю неправильно, используя «|» оператора в коде, что я не могу получить время времени в файле журнала – decisive