php - 将变量传递给windows .bat脚本?

时间:2011-09-15 21:12:15

标签: php command-line batch-file

我需要从PHP运行.bat脚本。 .bat脚本需要包含PHP变量的文件名。我将如何在PHP中执行此操作?

谢谢!

4 个答案:

答案 0 :(得分:1)

使用fopen()fwrite()fclose()创建.bat文件,然后使用shell_exec()执行该文件。见这里:

fopen:http://us3.php.net/manual/en/function.fopen.php

fwrite:http://us3.php.net/manual/en/function.fwrite.php

fclose:http://us3.php.net/manual/en/function.fclose.php

shell_exec:http://php.net/manual/en/function.shell-exec.php

=============================================== ==================================

编辑: 或者,如果它总是传递相同数量的php变量并且它们是标量,那么您可以创建一个接受命令行参数的.bat文件,然后传递shell_exec中的标量变量。

答案 1 :(得分:0)

将变量从一种编程语言传递给另一种编程语言?在指定的语言支持参数之前,如果有一些(并且有),则使用它(通过参数传递变量)

答案 2 :(得分:0)

如果您的bat文件只是获取文件名和一些基本参数,那么您只需填写适当参数的shell_exec()。

批处理文件命令行参数被引用为%1%2等,如果您的批处理文件是foo.bat并且它包含:

notepad.exe %1

您可以从命令行调用foo.bat textfile.txt

要从php运行它,您将命令行构造为字符串,然后使用它调用shell_exec

答案 3 :(得分:0)

要扩展Jonathan的答案,您不必使用PHP执行批处理文件。您也可以仅使用PHP生成配置批处理文件。然后,您可以在批处理文件中调用它以访问所需的所有变量。这非常灵活,将变量保存在单独的批处理文件中可保持您的主代码整洁。

为说明起见,您将需要三个文件:

  1. batch.bat您的主要批处理文件
  2. setup.php配置生成器
  3. config.bat配置批处理文件(由setup.php创建)

配置生成器

首先,我们将创建setup.php脚本,该脚本将生成config.bat文件。看起来可能像这样:

// Create a list of all variable names we want
// to use in the bat file, with their values.
// Note that these can come from anywhere - from
// a database, other files, remote API calls, etc.
$batVariables = array(
    'InfoFile' => 'info.txt',
    'TrackListing' => 'tracklist.txt',
    'AuthorBio' => 'author.txt',
    'MainTrack' => 'audio.mp3'
);

// create the code for the configuration
// batch file.
$batCode = 
'@echo off'.PHP_EOL.
':: AUTOMATICALLY GENERATED FILE, DO NOT EDIT'.PHP_EOL.
PHP_EOL;

// add all variables
foreach($batVariables as $varName => $value) 
{
    $batCode .= 'set '.$varName.'='.$value.PHP_EOL;
}

// save the configuration file
file_put_contents('config.bat', $batCode);

这将生成一个如下所示的批处理文件:

@echo off
:: AUTOMATICALLY GENERATED FILE, DO NOT EDIT

set InfoFile=info.txt
set TrackListing=tracklist.txt
set AuthorBio=author.txt
set MainTrack=audio.mp3

加载配置

接下来,在批处理文件中添加以下两行(您必须确保可以在PATH系统变量中访问php可执行文件):

:: Generate the configuration batch file
php setup.php

:: Load the configuration with all variables
call config.bat

这将在每次使用主批处理文件时生成新的配置。

通过使用config.bat命令加载call,这些变量将直接在主批处理文件的范围内可用。这意味着您可以像往常一样开始使用它们,例如:

echo Using the information file %InfoFile%.

除此之外,您可能希望添加一些错误检查,以防无法生成配置文件。一种简单的方法是确保文件存在:

IF EXIST "config.bat" (
    call "config.bat"
) ELSE (
    echo The configuration file does not exist.
    echo.
    pause
    exit
)