需要一些快速的帮助。 这是一个大学课程,除了当我打电话给我:forLoop方法遍历100个数字(1,1,100),从1开始直到100并且执行迭代%5(i %% 5)时,一切工作正常。 出于某种原因,我无法得到这个工作。 感谢任何帮助或方向。
当我回显%% A时,它会遍历所有完美的数字。 当我回声%结果%我得到一个空白的“”(里面没有)
:forLoop FOR /L %%A IN (1,1,100) DO ( set /A result=%%A %% 2 echo "%%A" echo "%result%" )
正确的代码是
:forLoop setlocal ENABLEDELAYEDEXPANSION FOR /L %%A IN (1,1,100) DO ( set /A result=%%A %% 5 echo !result! >> results.txt set /A total=!total!+!result! echo !total! )
问题在于当for被读取时%result%被替换,这意味着当循环被执行时它不再是一个变量。 你需要的是延迟变量扩展才能被启用,然后使用! 而不是% :
setlocal ENABLEDELAYEDEXPANSION :forLoop FOR /L %%A IN (1,1,100) DO ( set /A result=%%A %% 5 echo "%%A" echo !result! )
这些都是在你运行SET /?时得到的帮助信息中解释的SET /? :
延迟的环境变量扩展对于解决问题很有用
当前一个线路发生的扩展的局限性
的文本被读取,而不是执行时。 下面的例子
演示了即时可变扩展的问题:
设置VAR =之前
如果“%VAR%”==“之前”(
设置VAR =之后
如果“%VAR%”==“之后”@echo如果你看到这个,它的工作
)
从不会显示消息,因为在两个IF语句中%VAR%
在第一个IF语句被读取时被替换,因为它在逻辑上
包括IF的主体,这是一个复合语句。 所以
如果复合语句里面真的比较“之前”与
“之后”永远不会是平等的。 同样,下面的例子
将无法按预期工作:
设置LIST =
(*)中的%i设置LIST =%LIST%%i
回声%LIST%
因为它不会建立当前目录中的文件列表,
而只是将LIST变量设置为找到的最后一个文件。
同样,这是因为%LIST%只是扩展一次
FOR语句被读取,当时LIST变量是空的。
所以我们正在执行的实际FOR循环是:
(*)中的%i设置LIST =%i
它只是将LIST设置为找到的最后一个文件。
延迟的环境变量扩展允许您使用不同的扩展
字符(感叹号)来扩展环境变量
执行时间处理时间。 如果启用了延时变量扩展,则上面的
例子可以写成如下工作:
设置VAR =之前
如果“%VAR%”==“之前”(
设置VAR =之后
如果“!VAR!” ==“之后”@echo如果你看到这个,它的工作
)
设置LIST =
(*)中的%i设置LIST =!LIST! %一世
回声%LIST%