Перенаправить вывод из команды в пакетном файле, чей вывод уже перенаправлен? - PullRequest
3 голосов
/ 21 февраля 2012

Я искал все выше и ниже, но все советы и рекомендации, которые я нашел, почему-то не работают. У меня есть командный файл, который вызывается так:

cmd /C "automateMyProgram.bat >> automation.log 2>>&1"

Это прекрасно работает: Automation.log загружается со всеми stdout и stderr для этого конкретного пакетного файла. Однако в этом пакетном скрипте у меня есть следующая команда:

start php updateDB.php param1 param2 ^> updateDB.log

Скрипт php отлично выполняется и прекрасно читает параметры, но updateDB.log никогда не создается. Я убедился, что в сообщении об ошибках php в файле php.ini задано отображение ошибок в интерфейс командной строки. В php-скрипте есть несколько операторов echo, которые мне нужно записать в журнал, но по какой-то причине они не выводятся. Я читал, что если вы используете команду запуска для вызова программы, вы должны использовать оператор каретки для перенаправления вывода, так как программа запускается в новом процессе. Я также попробовал:

start php updateDB.php param1 param2 >> updateDB.log

и это тоже не сработало. И тогда я попытался:

start /B "Database Update" "php" "param1" "param2" >> updateDB.log

и это не сработало из пакетного файла, но сработало, когда я скопировал и вставил его прямо в окно cmd на рабочем столе.

Может кто-нибудь из вас знает, как я могу перенаправить вывод вызываемого php-скрипта из командного файла?

Спасибо за ваше время и помощь!

Ответы [ 2 ]

5 голосов
/ 22 февраля 2012

Это, наверное, самое простое решение:

start cmd /c "php updateDB.php param1 param2 > updateDB.log"

или, если вы хотите включить сообщения об ошибках в updateDB.log,

start cmd /c "php updateDB.php param1 param2 > updateDB.log 2>&1"
0 голосов
/ 29 августа 2014

Вот пример кода, который работал в файле BATCH, запускающем VBScripts с помощью команды START. Это запустит отдельный процесс и поместит результаты в указанный файл журнала.

rem **Setting the passed device to run against to a varible**
SET Audit_Device=%1

rem     **Launching "_SomeScript.vbs" in a seperate window**
start "WindowTitle" /d%~dp0  cmd /C cscript.exe ^"%~dp0_SomeScript.vbs^" %Audit_Device% ^>^"%~dp0%Audit_Device%_SomeScriptLogFile.txt^"

rem       **Launching "ListPermissionsForAllShares-Basic-and-Detailed.vbs" in a seperate window**
start "List Share Permission" /d%~dp0  cmd /C cscript.exe ^"%~dp0ListPermissionsForAllShares-Basic-and-Detailed.vbs^" %Audit_Device% ^>^"%~dp0%Audit_Device%_Share_Permissions.txt^"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...