我是Windows批处理脚本的新手,可能这是一个常见的问题,多次回答。我遇到的问题是使用以下脚本:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set var1=1
echo var1 = %var1%
set var2=var1 init value : %var1%, var1 delayed value : !var1!
set var1=2
echo var1 = %var1%
echo var2 = !var2!
endlocal
目前的输出是:
var1 = 1
var1 = 2
var2 = var1 init value : 1, var1 delayed value : 1
,但所需的输出应为:
var1 = 1
var1 = 2
var2 = var1 init value : 1, var1 delayed value : 2
如何实现,任何想法?在var1更改其值后,如何以某种方式重新评估var2变量?提前谢谢!
答案 0 :(得分:3)
你的意思是这样的:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set var1=1
echo var1 = %var1%
set var2=var1 init value : %var1%, var1 delayed value : %%var1%%
set var1=2
echo var1 = %var1%
call echo var2 = %var2%
endlocal
示例输出:
var1 = 1
var1 = 2
var2 = var1 init value : 1, var1 delayed value : 2
当设置var2时,双百分号将评估为单个符号,
调用回显强制另一个评估,现在扩展var1的实际值
答案 1 :(得分:1)
首先,这是不是一个“常见的新手问题”;你想做什么有点不寻常...
您需要在代码中进行两处小改动:
<canvas id="myCanvas" width="480" height="320"></canvas>
正常set var2=var1 init value : %var1%, var1 delayed value : !var1!
和延迟%var1%
扩展的值相同。您不希望在!var1!
中存储 !var1!
的值,但文字字符串 var2
,所以当您稍后展开{{ 1}},重新扩展这样的字符串。要做到这一点,你需要逃避感叹号;这是通过这种方式使用插入符号来完成的:!var1!
当字符串用引号括起来时,或者用这样的三个插入符号:var2
否则(转义符号加上转义感叹号)。 "^!var1^!"
中字符串的双扩展,那么第一个必须是标准^^^!var1^^^!
扩展,不是延迟var2
。这是前两个更改的最终代码:
%var2%