将变量传递给Windows .bat脚本


pass variables to windows .bat script?

我需要从PHP运行。bat脚本。.bat脚本需要包含作为PHP变量的文件名。如何在PHP中实现呢?

谢谢!

使用fopen(), fwrite()fclose()创建。bat文件,然后使用shell_exec()执行。在这里看到的:

打开外部文件:http://us3.php.net/manual/en/function.fopen.php

写入文件:http://us3.php.net/manual/en/function.fwrite.php

文件关闭:http://us3.php.net/manual/en/function.fclose.php

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

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

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

将变量从一种编程语言传递到另一种编程语言?没有,直到指定的语言支持参数,如果有一些(确实有),使用它(通过参数传递变量)

如果您的bat文件只是接受文件名和一些基本参数,那么您只需使用shell_exec()填充适当的参数。

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

notepad.exe %1

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

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

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

为了说明这一点,您需要三个文件:
  1. batch.bat你的主批处理文件
  2. setup.php配置生成器
  3. config.bat配置批处理文件(由setup.php创建)

配置生成器

首先,我们将创建生成config.bat文件的setup.php脚本。它可以像这样:

// 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

加载配置

接下来,在批处理文件中添加这两行(必须确保php可执行文件在PATH系统变量中可访问):
:: Generate the configuration batch file
php setup.php
:: Load the configuration with all variables
call config.bat

每次使用主批处理文件时都会生成一个新的配置。

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

echo Using the information file %InfoFile%.
除此之外,您可能希望添加一些错误检查,以防无法生成配置文件。一种简单的方法是确保文件存在:
IF EXIST "config.bat" (
    call "config.bat"
) ELSE (
    echo The configuration file does not exist.
    echo.
    pause
    exit
)