php - Omdirigere output fra en kommando i en batchfil, hvis output allerede er omdirigeret?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har søgt højt og lavt, men alle de forslag og tips, jeg har fundet, virker ikke af en eller anden grund. Jeg har en batchfil, der påberåbes som sådan:


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


Det virker godt: automation.log bliver fyldt med alle stdout og stderr for den pågældende batchfil. Men inden for det batch script har jeg følgende kommando:


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


Php script bliver udført bare fint og læser i parametrene bare fint, men updatedb.log er aldrig oprettet. Jeg sikrede, at php-fejlrapportering i php.ini-filen er indstillet til outputfejl til kommandolinjens grænseflade. Der er flere ekko-erklæringer i php-scriptet, som jeg skal have optaget i en logfil, men de udsendes ikke af en eller anden grund. Jeg læser, at hvis du bruger startkommandoen til at påberåbe et program, skal du bruge caret operatøren til at omdirigere output siden programmet er startet i en ny proces. Jeg prøvede også:


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


og det virkede heller ikke. Så jeg prøvede:


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


og det virkede ikke inden for batchfilen, men det gjorde, da jeg kopierede og indsatte det direkte i et cmd-vindue på skrivebordet.


Kan nogen af ​​jer vide, hvordan jeg kan omdirigere output fra php scriptet, der kaldes fra en batchfil?


Tak for din tid og hjælp!

Bedste reference


Dette er nok den enkleste løsning:


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


eller hvis du vil inkludere fejlmeddelelser i updateDB.log,


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

Andre referencer 1


Her er en prøvekode, der fungerede i en BATCH-fil, der lancerede VBScripts med START-kommandoen. Det vil lukke den separate proces og sætte resultaterne i den angivne logfil.


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^"