永发信息网

bat是否在for循环不能改变变量的值?

答案:2  悬赏:20  手机版
解决时间 2021-03-05 17:38
  • 提问者网友:爱唱彩虹
  • 2021-03-04 17:20
@echo off
setlocal enabledelayedexpansion
set flag=1
(for /f "tokens=1* delims=:" %%h in ('findstr /n "." "my.txt"') do (
set "str=%%i"
echo %flag%
if %flag%==1 (
set flag=0
) else (
echo,%%i
)
))
为什么flag一直都是1啊
最佳答案
  • 五星知识达人网友:煞尾
  • 2021-03-04 18:23
for中循环设置变量,需要开启环境变量延迟,开启后,原本变量名两边的百分号就要换成感叹号,这样才能正常使用循环变量的值。

所以 %flag% 必须更改成 !flag!
全部回答
  • 1楼网友:像个废品
  • 2021-03-04 18:30
预处理机制:批处理读取命令时是按行读取的(另外例如 for 命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。在不启用变量延迟,也不对变量动态捕获其扩展变化时,变量在预处理阶段不作改变 setlocal enabledelayedexpansion ,就是启用变量延迟,我们可以形象的认为是启用了“对变量动态捕获扩展变化”。而 ! 括起来的变量,就是要动态捕获扩展的目标变量,如果不需要,可以继续使用 % 括变量。 示例 @echo off setlocal enabledelayedexpansion for /l %%i in (1 1 10) do ( set var=%%i echo !var! 启用延缓环境变量 echo %var% 未启用延缓环境变量 )
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯