Windows批处理脚本 – 对于/ L不工作 – 简单

需要一些快速的帮助。 这是一个大学课程,除了当我打电话给我: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%