[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [语法]批处理中的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??求大神指教,谢谢。

谢谢大神指点
我起初始终把%%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却不能,所以当时无法理解,现在解释通了,谢谢

TOP

echo;%s%%i%在这里等于echo;%s%  %i%
  1. @echo off
  2. set s=999
  3. set a=888
  4. for /l %%i in (1,1,1) do (set S%%i=8)
  5. echo;%S1%
  6. for /l %%a in (1,1,1) do (
  7.   echo;%%a
  8.   echo;%S%%a%
  9. )
  10. pause
复制代码
你这样测试,仔细观看。

TOP

返回列表