使用php在命令提示符下执行windows命令

时间:2013-12-04 06:34:22

标签: php

以下命令在命令提示符下运行。如何使用命令提示符从php执行此操作。

"C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe"/Session:"session"

我尝试如下,但两种尝试均无效。你能建议正确的格式吗?

1)exec('C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe "'/Session:session'"');

2)system("C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe /Session:session",$status);

2 个答案:

答案 0 :(得分:1)

我在尝试从提示符执行命令时发现了许多解决方案,但这取决于您使用的Windows版本。这是我通过php运行命令的方式,我知道在命令提示符下工作。你需要在php5.4 +中启用COM扩展。我发现,最困难的部分是确保你到处都有正确数量的反斜杠。我通常会回显$ runCommand,以便在我对语法不正确感到失望之前测试输出。

// -- Windows command prompt action -- //
$WshShell = new COM("WScript.Shell");
$data='C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe /Session:session';
$runCommand = "c:\\windows\\system32\\cmd.exe /C ".$data;
$output = $WshShell->Run($runCommand, 0, false);    
// -- end Windows command prompt action -- // 

答案 1 :(得分:0)

你可能想看看我为此专门写的command library。 (对无耻的酒吧感到抱歉)

它协调操作系统差异,并尝试解决一些讨厌的Windows错误。即使在windows下使用exec,它也允许你访问stdout,stdin和stderr。

例如,在您的情况下:

use Tivie\Command\Command;

$cmd = new Command(\Tivie\Command\ESCAPE);
$cmd->setCommand('C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe')
    ->addArgument(
        new Argument('/Session:"session"')
    );
$result = $cmd->run();

Command::run()返回您可以访问的Result object以检索命令的结果。

echo $result->getStdOut();    // The Standard Output of the command
echo $result->getLastLine();  // The last line of the Standard Output
echo $result->getStdIn();     // The passed standard input
echo $result->getStdErr();    // The standard error
echo $result->getExitCode();  // The command's exit code