使用PHP在命令提示符下运行.bat文件

每当我点击一个按钮时,我需要在命令提示符下运行 .bat </ code>文件 或超链接。 我写的代码是:</ p>

 &lt;?php 
if(isset($ _ POST ['submit']) )
{
$ param_val = 1;
$ test ='main.bat $ par';

// exec('c:\ WINDOWS \ system32 \ cmd.exe / c START C:/wamp/www/demo/m.bat');

// exec('cmd / c C:/wamp/www/demo/m.bat');
// exec('C:/WINDOWS/system32/cmd.exe');
// exec ('cmd.exe / c C:/wamp/www/demo/main.bat');
exec('$ test');
}
else
{
?&gt;

&lt; form action =“”method =“post”&gt;
&lt; input type =“submit”name =“submit”value =“Run”&gt;
&lt; / form&gt;

&lt;? php
}
?&gt;
</ code> </ pre>

我的 main.bat </ code>是:</ p>

  @echo off 
cls
:start
echo。
echo 1.append日期和时间到日志文件
echo 2.just ping google.com

set / p choice =“选择你的选项?”

if'%choice%'=='1'goto:choice1
if'%choice%'=='2'goto:choice2
echo“%choice%”不是 一个有效的选择。 请再试一次。
echo。
goto start
:choice1
call append.bat
goto end
:choice2
call tr​​y.bat
goto end
:end
pause
</ code> </ pre>

当我点击运行按钮时,它必须打开命令提示符并运行 main.bat </ code>文件,但每当我点击运行时它什么也没说。</ p>
</ DIV>

展开原文

原文

I need to run a .bat file in a command prompt whenever I click a button or hyperlink. The code I've written is:

<?php
    if(isset($_POST['submit']))
    {
        $param_val = 1;
        $test='main.bat $par'; 
        // exec('c:\WINDOWS\system32\cmd.exe /c START C:/wamp/www/demo/m.bat');    
        // exec('cmd /c C:/wamp/www/demo/m.bat');
        // exec('C:/WINDOWS/system32/cmd.exe');
        // exec('cmd.exe /c C:/wamp/www/demo/main.bat');
        exec('$test');
    } 
    else
    {
        ?>

        <form action="" method="post">
        <input type="submit" name="submit" value="Run">
        </form>

        <?php
    }
?>

my main.bat is:

@echo off
cls
:start
echo.
echo 1.append date and time into log file
echo 2.just ping google.com

set/p choice="select your option?"

if '%choice%'=='1' goto :choice1
if '%choice%'=='2' goto :choice2
echo "%choice%" is not a valid option. Please try again.
echo.
goto start
:choice1
call append.bat
goto end
:choice2
call try.bat
goto end
:end
pause

When I click the run button it has to open the command prompt and run the main.bat file, but whenever I click run it says nothing.

doujia6503
doujia6503 可能重复的如何从PHP运行.bat文件?
3 年多之前 回复
dongnuo3749
dongnuo3749 我没有问你是什么让你认为提示应该打开,但OP似乎认为,因为他没有看到提示弹出,exec调用不起作用......或者至少,这就是我的方式理解这个问题。
大约 7 年之前 回复
doudou3935
doudou3935 -是什么让我觉得应该出现一个窗口?“必须打开命令提示符”部分问题,以及甚至以暂停结束的交互式批处理文件。我的假设是错的,但问题并不容易......
大约 7 年之前 回复
dongtun1683
dongtun1683 然后你将不得不使用proc_open并使用引用STDIN和STDOUT流的管道,这样你就可以实际响应bat脚本
大约 7 年之前 回复
douxueke5653
douxueke5653 不想弹出cmd窗口..我想要的是用.bat文件写的动作必须完成
大约 7 年之前 回复
dounangqie4819
dounangqie4819 PHP通过shell_exec,system等甚至反引号提供了与其他shell的良好互操作性。即使它在Linux服务器上更常见,它也适用于Windows。您不需要显示Shell窗口,只需捕获其STDOUT/STDERR即可
大约 7 年之前 回复
dongmouhao7438
dongmouhao7438 我使用wamp服务器
大约 7 年之前 回复
douchunji1885
douchunji1885 是什么让你觉得应该出现一个cmd窗口?该命令可能会运行(一旦你整理了路径和所有这些),但这并不意味着你会看到一个窗口出现。您的bat文件还提示需要某种形式的交互,这是使用exec无法完成的,您必须使用proc_open或其他东西,以获得输入和输出管道
大约 7 年之前 回复
dongyi7669
dongyi7669 使用$_POST建议使用HTTP。使用服务器端PHP调用交互式程序没有实用的方法。即使您设法启动cmd.exe窗口(我不能完全确定是可能的),窗口也会在服务器上弹出,因此您需要以Web服务器运行的用户身份登录。
大约 7 年之前 回复

4个回答



  $ test ='main.bat $ par'; 
exec('$ test');
</ code > </ pre>

... 不会</ strong>工作。</ p>

PHP只在双引号中使用$变量。</ p>

这也是不良做法</ strong>: $ test =“main.bat $ par”; </ code>。 </ p>

Windows也需要反斜杠</ strong>而不是需要转义</ strong>的斜杠,而是用双引号中的另一个反斜杠。</ p>

使用以下方法之一:</ strong> </ p>

  $ test ='cmd / c C:\ wamp \ www \ demo \ main.bat  '。  $ par; 
</ code> </ pre>

或</ p>

  $ test =“cmd / c C:\ wamp \ www  \ demo \ main.bat {$ par}“; 
</ code> </ pre>

运行:</ p>

  echo shell_exec(  $ test); 
</ code> </ pre>

更多失败:</ strong> </ p>

删除 pause < / code>从脚本的末尾开始。 PHP不会自动获得它。</ p>

仔细查看批处理文件,我敢打赌你甚至都不需要它。 批处理文件中的所有内容都可以放入PHP文件中。</ p>

如上所述 Elias Van Ootegem </ em>,您需要在STDIN中输入管道以输入您的选项( 1,2)进入批处理文件。</ p>
</ div>

展开原文

原文

$test='main.bat $par';
exec('$test');

... won't work.

PHP only takes $variables in double quotation marks.

This is bad practice also: $test = "main.bat $par";.

Also windows takes backslashes instead of slashes which need to be escaped through another backslash in double quotes.

Use one of these:

$test = 'cmd /c C:\wamp\www\demo\main.bat ' . $par;

or

$test = "cmd /c C:\\wamp\\www\\demo\\main.bat {$par}";

run:

echo shell_exec($test);

Even more fails:

Remove the pause from the end of your script. PHP does not get arround that automatically.

Looking more at the batch file, I bet you don't even need it. Everything inside the batch file can be put into a PHP file.

As Elias Van Ootegem already mentioned, you would need to pipe in STDIN to enter your option (1, 2) into the batch file.

dou11655853
dou11655853 好吧,我猜你要写他的代码......?
大约 7 年之前 回复
du8442
du8442 php.net/proc_open! - >参数 - >示例....你还需要什么?
大约 7 年之前 回复
duannong1801
duannong1801 对于proc_open,我们需要传递三个参数...第一个参数将是批处理文件...第二个,第三个参数
大约 7 年之前 回复
donglie9067
donglie9067 php.net/proc_open
大约 7 年之前 回复
dopnpoh056622
dopnpoh056622 怎么做那个管道..请你告诉我
大约 7 年之前 回复
drtohng5613
drtohng5613 我110%肯定如果你遵循php.net语法和我的tipps它将工作
大约 7 年之前 回复
dongyun8891
dongyun8891 仍然没有发生..
大约 7 年之前 回复
douke1954
douke1954 我还试过main.bat没有在cmd提示符下运行..
大约 7 年之前 回复
dongshadu4498
dongshadu4498 谢谢你的回复...但仍然没有在cmd中运行main.bat
大约 7 年之前 回复



由于您通过浏览器运行PHP脚本,因此在Web服务器上,.bat文件执行在Web服务器而不是客户端上 。</ p>

无论您是在同一台计算机上运行服务器,您的蝙蝠都可能被执行但您无法与之交互。</ p>

解决方案 可能是制作一个接受参数而不是交互的bat,并将交互带回PHP脚本前面,以便用正确的args调用bat执行。</ p>
</ div>

展开原文

原文

Since you run the PHP script through a browser, on a web server, the .bat file execution occurs on the web server not the client.

No matter if you run your server on the same computer, your bat may be executed but you can not interact with it.

The solution may be to make a bat that takes arguments instead of being interactive, and bring the interaction back to front the PHP script in order to call the bat execution with the correct args.



我在我的电脑上试过这个exec。

你的蝙蝠会执行,但你看不到黑色界面。 你可以试试像 @echo off
Echo tmptile&gt; 像这样的tmp.txt </ i>,它可以创建一个名为tmp.txt的文件来告诉你。 蝙蝠被执行了。</ p>
</ div>

展开原文

原文

I‘ve tried this exec on my pc . your bat would executed but you can't see the black interface. you could try the bat like @echo off Echo tmptile > tmp.txt like this ,it could create the a file named tmp.txt which tells you. the bat was executed.

douyun7718
douyun7718 你可以在我的main.bat文件中看到当用户点击选择1它转到append.bat..in append.bat我有log.txt文件....
大约 7 年之前 回复



假设您只想模拟</ em>交互式会话,您只需要使用 proc_open()及相关函数:</ p>

 &lt;?php 

$ command = escapeshellcmd('main.bat');

$ input ='1';

$ descriptors = array(
0 =&gt; array(“pipe”,“r”),// stdin
1 =&gt; array(“pipe”,“w”),// stdout
);

$ ps = proc_open($ command,$ descriptors,$ pipes);

if(is_resource) ($ ps)){
fwrite($ pipes [0],$ input);
fclose($ pipes [0]);

while(!feof($ pipes [1])){
echo fread($ pipes [1],4096);
}
fclose($ pipes [1]);

$ output = proc_close($ ps);
if($ output!= 0){

trigger_error(“命令返回$ output”,E_USER_ERROR);
}

} else {
trigger_error('无法执行命令',E_USER_ERROR);
}
</ code> </ pre >
</ div>

展开原文

原文

Assuming that you just want to simulate an interactive session, you just need to use proc_open() and related functions:

<?php

$command = escapeshellcmd('main.bat');

$input = '1';

$descriptors = array(
    0 => array("pipe", "r"), // stdin
    1 => array("pipe", "w"),  // stdout
);

$ps = proc_open($command, $descriptors, $pipes);

if(is_resource($ps)){
    fwrite($pipes[0], $input);
    fclose($pipes[0]);

    while(!feof($pipes[1])){
        echo fread($pipes[1], 4096);
    }
    fclose($pipes[1]);

    $output = proc_close($ps);
    if($output!=0){
        trigger_error("Command returned $output", E_USER_ERROR);
    }

}else{
    trigger_error('Could not execute command', E_USER_ERROR);
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问