标题: [其他] [语法]批处理中的for与延迟变量 [打印本页]
作者: riscrisc 时间: 2017-4-21 15:50 标题: [语法]批处理中的for与延迟变量
小弟最近在学批处理的for命令和变量延迟,发现一个问题想不通,特此请教大神。实验代码如下:
::延迟变量实验
@echo off
for /l %%i in (1,1,%num%) do (set S%%i=8)
echo S1
for /l %%i in (1,1,%num%) do (
echo %%i
echo %S%%i%)
我的问题是为啥第二个for中的echo %S%%i%显示不出来?我知道这个和延迟变量有关,但是我不明白的是既然S1~S10已经在第一个for中定义过了,而且直接echo S1都显示正常,那为什么在第二个for中%S%%i%却认不出来?难道预编译的时候只退去第一层%%导致代码被预编译为echo S%%i??求大神指教,谢谢。
作者: taofan712 时间: 2017-4-21 16:35
echo;%s%%i%在这里等于echo;%s% %i%- @echo off
- set s=999
- set a=888
- for /l %%i in (1,1,1) do (set S%%i=8)
- echo;%S1%
- for /l %%a in (1,1,1) do (
- echo;%%a
- echo;%S%%a%
- )
- pause
复制代码
你这样测试,仔细观看。
作者: riscrisc 时间: 2017-4-21 23:27
谢谢大神指点
我起初始终把%%a看做一个变量了
没想到%S%%a%还能分成%S%和%a%啊,,,
因为一开始我还做了个实验,用了延迟变量
::set s=999
::set a=888
for /l %%i in (1,1,1) do (set S%%i=8)
echo;%S1%
setlocal enabledelayedexpansion
for /l %%a in (1,1,1) do (
echo %%a
echo %S%%a%
echo !S%%a!
)
屏蔽掉s和a的定义以后,我发现如果用了延迟变量,第二个for里的第三个echo是能显示的,而第二个echo却不能,所以当时无法理解,现在解释通了,谢谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |