我试图使用一个简单的for循环来创建一系列字符串后跟一个数字。但是,当我尝试将iterator-variable添加到字符串的末尾时,添加的值将是循环的端点。
该脚本的简化版本是:
@echo off
set STARTSTRING="Test-
for /l %%x in (1, 1, 26) do (
echo %%x
set CONCATENATED_STRING=%STARTSTRING%%%x"
echo %CONCATENATED_STRING%
)
pause
给出了输出:
有人可以向我解释我哪里出错了吗?
答案 0 :(得分:2)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}
因此,FOR ... DO (block)
将在遇到IF (something) else (somethingelse)
时使用%variables%
的值执行。
解决此问题的两种常见方法是1)使用IF
并使用setlocal enabledelayedexpansion
代替!var!
来访问已更改的%var%
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。
所以 -
var
注意引号的位置(以便行末端的杂散空格不会分配给变量。)
@echo off
setlocal enabledelayedexpansion
set "STARTSTRING=Test-"
for /l %%x in (1, 1, 26) do (
echo %%x
set "CONCATENATED_STRING=!STARTSTRING!%%x"
echo !CONCATENATED_STRING!
)
pause
以!var!
模式访问变量的运行时值 - delayedexpansion
分析时间值
%var%
还确保批处理结束时,对环境变量所做的任何更改都将被丢弃。正如您所看到的,该变量保留了其在上一批次运行中设置的值。