将环境变量传递给子shell CMD

时间:2017-03-04 22:20:34

标签: batch-file gitlab-ci gitlab-ci-runner

我的Windows gitlab-ci.yml出现问题。我用环境变量启动phpunit 所以,我有一个变量:

PHPUNIT : %SOURCE_PATH%\cgi-bin\php.exe %PHPUNIT_PATH%

之前声明了一些变量:

SOURCE_PATH: 'C:\Source'
PHPUNIT_PATH: '"%SOURCE_PATH%\cgi-bin\tests\__init\tools\phpunit.phar"'

但是当我使用 CALL 命令时,Windows无法解析其他变量中的变量。

所以,如果我这样做:

CALL Echo %PHPUNIT%

我有:

C:\Source\cgi-bin\php.exe "%SOURCE_PATH%\cgi-bin\tests\__init\tools\phpunit.phar"

我认为这是因为 CALL 上下文中不存在%SOURCE_PATH%

但我无法找到如何在 CALL 中传递环境变量。我也找不到另一种方法来做到这一点。 (如果我不使用 CALL ,则当内部脚本退出时, gitlab-ci 会停止。)

我希望你能帮助我......

要知道的事情。

我的脚本由 gitlab-ci 亚军推出,所以它由以下人员启动:

setlocal enableextensions
setlocal enableDelayedExpansion
set nl=^

我无法改变这一点。

如果需要,我可以使用PowerShell,或者如果你知道另一种解决方法。 :)

2 个答案:

答案 0 :(得分:1)

此批处理文件演示了执行问题并提供了解决方案。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
cls
set "SOURCE_PATH=C:\Source"
set "PHPUNIT_PATH="%%SOURCE_PATH%%\cgi-bin\tests\__init\tools\phpunit.phar""
echo %SOURCE_PATH%\cgi-bin\php.exe %PHPUNIT_PATH%
echo/
echo Reference to environment variable SOURCE_PATH in environment
echo variable PHPUNIT_PATH is not expanded on running php.exe.
echo/
echo Solution:
echo/
echo Explicitly set environment variable PHPUNIT_PATH once more with
echo its own value with using additionally the command CALL to expand
echo all variable references inside the variable value.
echo/
call set "PHPUNIT_PATH=%PHPUNIT_PATH%"
echo %SOURCE_PATH%\cgi-bin\php.exe %PHPUNIT_PATH%
echo/
endlocal
pause

通过指定参数EnableExtensionsEnableDelayedExpansion来定义命令行环境,不要多次运行 SETLOCAL 。两者都可以在运行 SETLOCAL 时指定一次。有关 SETLOCAL ENDLOCAL 命令的详细说明,请参阅this answer,其中应明确说明为什么不建议运行 SETLOCAL 比实际需要更多。

仅在真正需要时才启用延迟扩展,因为处理文本中的感叹号或目录/文件名或参数字符串不再作为启用延迟扩展的文字字符处理。

答案 1 :(得分:0)

你的问题不是那么明确......但是,我可能会猜到 - 你的inbetween脚本最后使用'退出'。因此,请将其替换为 退出/ B

或尝试使用'开始'而不是致电 ...(开始/ B ... - 检查'开始/?'