Я искал высоко и низко, но все предложения и подсказки, которые я нашел, по какой-то причине не работают. У меня есть пакетный файл, который вызывается как таковой:
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-скрипте есть несколько выражений эха, которые мне нужно записать в журнал, но по какой-то причине они не выводятся. Я читал, что если вы используете команду start для вызова программы, вы должны использовать оператор каретки для перенаправления вывода, поскольку программа запускается в новом процессе. Я также пробовал:
start php updateDB.php param1 param2 >> updateDB.log
и это тоже не сработало. Поэтому я тогда попытался:
start /B "Database Update" "php" "param1" "param2" >> updateDB.log
и это не работает из пакетного файла, но это произошло, когда я копировал и вставлял его непосредственно в CMD-окно на рабочем столе.
Может кто-нибудь из вас знает, как я могу перенаправить вывод скрипта php из пакетного файла?
Спасибо за ваше время и помощь!
Это, вероятно, самое простое решение:
start cmd /c "php updateDB.php param1 param2 > updateDB.log"
или, если вы хотите включить сообщения об ошибках в updateDB.log,
start cmd /c "php updateDB.php param1 param2 > updateDB.log 2>&1"
Вот пример кода, который работал в файле 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^"