批处理文件运行机制:批处理读取命令时是按行读取的,对于for 命令等,其后用一对圆括号闭合的所有语句也当作一行。
在for循环中,如果要循环的对某个变量进行赋值,那就需要对该变量进行动态捕获,从而获得实时变化的该变量的值。
setlocal enabledelayedexpansion 命令就是启用变量延迟,
(1)如果不启用变量延迟,变量在预处理阶段不作改变
(2)如果启用变量延迟,用 ! 括起来的变量,就是需要动态捕获的目标变量,如果不需要,可以继续使用 % 括变量。
@echo off setlocal enabledelayedexpansion set var=-1 for /l %%i in (1 1 10) do ( set var=%%i echo !var! 启用延缓环境变量,var的值是不断变化的,1->2->3,...,->10 echo %var% 未启用延缓环境变量,var的值永远是初始化的-1 )
另外一个例子:
@echo off setlocal enabledelayedexpansion set python=python.exe set code_e=e.code set code_j=j.code for /l %%i in (0,1,10) do ( set src=e.txt.wbr.bpe.%%i.out set tgt=j.txt.wbr.bpe.%%i start cmd /k %python% apply_bpe.py -c %code_j% -i !src! -o !tgt! ) pause
原文:https://www.cnblogs.com/codeDog123/p/10628105.html