Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
批处理脚本的返回代码在php中不起作用_Php_Batch File_Exit Code_Error Code - Fatal编程技术网

批处理脚本的返回代码在php中不起作用

批处理脚本的返回代码在php中不起作用,php,batch-file,exit-code,error-code,Php,Batch File,Exit Code,Error Code,我有一个非常简单的批处理文件,我想从PHP运行,并得到这个文件的退出代码 如果我从cmd.exe运行批处理脚本,echo%errorleve%将返回正确的退出代码,在本例中为12。 从PHP脚本中,退出代码是0 my_batch.bat文件 @ECHO OFF if "1"=="1" ( if "1"=="1" ( echo quitting exit /B 12 ) echo anything ) @ECHO OFF if "1"=="1" ( if "

我有一个非常简单的批处理文件,我想从PHP运行,并得到这个文件的退出代码

如果我从
cmd.exe
运行批处理脚本,
echo%errorleve%
将返回正确的退出代码,在本例中为
12
。 从PHP脚本中,退出代码是
0

my_batch.bat文件

@ECHO OFF

if "1"=="1" (
  if "1"=="1" (
    echo quitting
    exit /B 12
  )

  echo anything
)
@ECHO OFF

if "1"=="1" (
  if "1"=="1" (
    echo quitting
    SET MYERROR=12
    GOTO:END 
  )

  echo anything
)

:END
echo finished ... ERRORLEVEL "%MYERROR%"
exit /b %MYERROR%
my_test.php

<?php
exec('my_batch.bat',$result,$exitcode);
echo $result[0];
echo '<br />';
echo $exitcode;
输出oh php:

quitting
0
谢谢你的支持

编辑1

很奇怪,如果我用这个版本修改代码,一切正常

my_batch.bat文件

@ECHO OFF

if "1"=="1" (
  if "1"=="1" (
    echo quitting
    exit /B 12
  )

  echo anything
)
@ECHO OFF

if "1"=="1" (
  if "1"=="1" (
    echo quitting
    SET MYERROR=12
    GOTO:END 
  )

  echo anything
)

:END
echo finished ... ERRORLEVEL "%MYERROR%"
exit /b %MYERROR%

你看过网站上的文档了吗?它告诉您调用
exec
会生成
cmd.exe
的实例,这将调用批处理脚本。这个中间进程可能不会传递返回代码


解决方案可以是使用
proc\u open

执行正确的文件
my_batch.bat
vs
command.bat
对不起,输入的名称错误。在我的测试中,所有人都在运行我注意到的行为是,如果
exit/b12
在括号外,那么PHP将获得exitcode
12
,否则为
0
。正确,但exist代码在CMD.exe中运行得非常好。为什么不在这个表单中使用PHP呢?正如Nico Haase所指出的,您得到的是
cmd
进程的退出代码,而不是批处理文件中的退出代码。您可以简单地删除
/B
proc\u open