【问题标题】:php - pass variables to windows .bat script?php - 将变量传递给 Windows .bat 脚本?
【发布时间】:2011-11-18 05:54:23
【问题描述】:

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

谢谢!

【问题讨论】:

  • 那么,PHP 调用了一个 .bat,它调用了 PHP 文件?
  • .bat 文件运行 LAME 音频编码器。 PHP 包含需要输入到 .bat 文件中的变量(音频文件文件名)。
  • 那么我的编辑应该适合你。

标签: php command-line batch-file


【解决方案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

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

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

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

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

【讨论】:

  • 酷 - 这将是 B 计划。这是否会在我的服务器目录中为每个文件上传存储一个批处理文件?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果你的 bat 文件只是取一个文件名和一些基本参数,那么你只需在 shell_exec() 中填写正确的参数。

    如果您的批处理文件是 foo.bat 并且它包含以下内容,则会引用 %1 %2 等批处理文件命令行参数:

    notepad.exe %1

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

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

    【讨论】:

      【解决方案4】:

      要扩展 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
      )
      

      【讨论】:

        猜你喜欢
        • 2012-11-15
        • 1970-01-01
        • 2015-06-08
        • 2016-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多