我需要从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来生成配置批处理文件。然后,您可以在批处理文件中调用它来访问所需的所有变量。这是非常灵活的,并且将变量保存在单独的批处理文件中可以保持主代码的整洁。
为了说明这一点,您需要三个文件:-
batch.bat
你的主批处理文件 -
setup.php
配置生成器 -
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
)