Sir*_*eat 2 math for-loop batch-file
为什么这不起作用?
@echo off
for /l %%i in (0, 1, 100) do (
for /l %%j in (0, 1, 10) do (
set /a curr=%%i*10 + %%j
echo %curr%
)
echo "-----------------------------"
)
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
"----------------------------"
1010
1010
1010
1010
1010
1010
1010
1010
...
Run Code Online (Sandbox Code Playgroud)
它似乎在执行之前预先计算了数学,所以当它最终执行时,%curr%已经是1010.我如何防止它这样做?我试图获得这样的输出:
0
1
2
3
4
5
6
7
8
9
10
"----------------------------"
11
12
...
Run Code Online (Sandbox Code Playgroud)
提前致谢
JohannesRössel的回答(对于那些可能会在以后寻找它的人):
@echo off
setlocal enabledelayedexpansion enableextensions
for /l %%i in (0, 1, 100) do (
for /l %%j in (0, 1, 10) do (
set /a curr=%%i*10+%%j
echo !curr!
)
echo "-----------------------------"
)
Run Code Online (Sandbox Code Playgroud)
通过在循环之前放置以下行来使用延迟扩展:
setlocal enabledelayedexpansion enableextensions
Run Code Online (Sandbox Code Playgroud)
然后使用环境变量!curr!代替%curr%.
你改变一个环境变量的内容块内,并在同一个块再次使用更改的内容.没有延迟扩展,这是行不通的.原因是在解析命令时cmd扩展变量%foo%- 以及类似if或for包含可能跟随的块的命令.延迟扩展会导致在执行您想要的命令之前评估变量.
help set 包括对没有延迟扩展的问题的描述并使用它.
| 归档时间: |
|
| 查看次数: |
1128 次 |
| 最近记录: |