与批处理脚本中的编码有关

时间:2017-05-19 05:23:00

标签: batch-file

我从用户那里阅读了deploy_landscape:

IF "%deploy_landscape%" == "Europe_Canary--LP_Performance" GOTO abcd
:abcd
(
echo Inside the second loop
set landscape=lpitstw7186bb8d
echo Landscape is %landscape%
GOTO EXIT
)

我得到输出为

Landscape is 

我没有看到正在打印景观的实际价值。 我还尝试了set landscape="lpitstw7186bb8d"set "landscape=lpitstw7186bb8d"

1 个答案:

答案 0 :(得分:1)

您需要阅读delayed expansion上的一些SO文章 - 其中有很多。

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}

因此,FOR ... DO (block)将在遇到IF (something) else (somethingelse)时使用%variables%的值执行。

解决此问题的两种常见方法是1)使用IF并使用setlocal enabledelayedexpansion代替!var!来访问已更改的%var%或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

请注意使用显示var更改值的CALL ECHO %%var%%var显示,但遗憾的是RESETS错误级别。