46

谁能告诉我如何从 PHP 脚本执行 .bat 文件?

我试过了:

exec("C:\[path to file]");
system("C:\[path to file]");

没有任何工作。我检查了 PHP 手册并用谷歌搜索,但找不到一个好的答案。有人知道我要去哪里错了吗?

我正在运行 Windows 2003 Server 并已成功手动运行 .bat 文件,它可以满足我的需要;我只需要能够以编程方式启动它。

4

7 回答 7

58

您可能需要通过 运行它cmd,例如:

system("cmd /c C:[path to file]");
于 2009-05-07T17:20:09.500 回答
13
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>
于 2009-10-27T20:29:56.420 回答
9

当您使用该exec()功能时,就好像您cmd打开了一个终端并直接向它输入命令。

像这样使用单引号这 $str = exec('start /B Path\to\batch.bat');
意味着/Bbat将在后台执行,因此php的其余部分将在运行该行后继续,而不是在 $str = exec('start /B /C command', $result); 哪里command执行然后result存储以供以后使用。

PS:它适用于 Windows 和 Linux。
更多细节在这里http://www.php.net/manual/en/function.exec.php :)

于 2013-06-01T07:54:23.593 回答
7
<?php
 pclose(popen("start /B test.bat", "r")); die();
?> 
于 2012-09-07T23:25:46.930 回答
2

在我的运行 IIS 8 的 Windows 机器 8 机器上,我只需输入 bats 名称并忘记它的路径即可运行批处理文件。或者通过将 bat 放在 c:\windows\system32 中,不要问我它是如何工作的,但它确实可以。哈哈

$test=shell_exec("C:\windows\system32\cmd.exe /c $streamnumX.bat");

于 2013-04-27T23:24:57.113 回答
0

此片段来自工作代码。

您不仅可以从 Windows GUI 或任务计划程序触发 bat 文件,还可以在需要时直接从 PHP 脚本触发。但在大多数情况下,它将执行 30-60 秒。取决于您的 PHP 配置。如果 BAT 文件中的作业很长并且您不想冻结您的 PHP 脚本,则需要将 BAT 作业作为另一个进程使用php.exe而不依赖于 Apache。

这在 Windows 中以后台模式运行,被视为单独的进程cmd.exe,并且php.exe从任务管理器中不会停止您的 Apache PHP 脚本。您的脚本生成的消息可以通过日志文件存储和检索。

就我而言,file_scanner.php我在循环中对大量文件进行了一些繁重的计算,这些文件可能会持续几个小时,而 php 函数sleep()不会使 CPU 过载。

$r如果您想知道成功或错误开始,您可以通过 ajax 查询文件中的成功指针结果 。在我的情况下,您可以每隔几秒钟使用 AJAX 将file_scanner.php消息写入日志文件 以显示进度。somefile.jpg - OK

PHP

/**
 * Runs bat file in background mode
 *
 */
 function run_scanner() {

    $c='start /b D:\Web\example.com\tasks\file_scanner.bat'; 
    $r=pclose(popen($c, 'r')); 
    return json_encode(array('result'=>$r));

 }

蝙蝠

@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
于 2019-05-28T21:00:14.727 回答
0

对于需要在后台运行程序“无需 PHP 等待它完成”的任何人,请执行以下操作:

 pclose(popen("start /B ".$cmd, "r")); 

$cmd您需要运行的程序的字符串命令在哪里(例如$cmd可以等于notepad.exenode Path\to\server.js)。

来源:https ://www.php.net/manual/en/function.exec.php (参见 Arno van den Brink 在标题为“用户贡献的注释”部分的注释)。

于 2020-10-08T10:00:41.647 回答